トップ 一覧 Farm 検索 ヘルプ RSS ログイン

2021da1.cppの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
 #include <stdio.h>
 #include <stdlib.h>
 //挿入ソート
 void sort(int num[ ], int n)
 {
    int i, j, temp;
	
    for (i = 1; i < n; i++) {
        temp = num[i];
        for (j = i; j > 0 && num[j-1] > temp; j--) 
            num[j] = num[j -1];
			
        num[j] = temp;
    }
 }
 //確認用
 void print(int a[])
 {
	for(int i=0; i<4; i++){
		printf("%d ", a[i]);
	}
	printf("\n");
 }
 
 int main(void)
 {
	int a[4];
	
	while(1){
		scanf("%d %d %d %d", &a[0], &a[1], &a[2], &a[3]);
		if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0){ 
			break;
		}
		
		print(a);
		
		while(1){
			//ソート
			sort(a, 4);
			
			print(a);
			
			//最小値と場所を見つける
			//ソートしたら1個目の椀が最小値かと思ったら、
			//0になるので、最初に0以外になる場所を探す必要がある
			int min=101, min_no;
			for(int i=0; i<4; i++){
				if(a[i]>0){
					min=a[i];
					min_no=i;
					break;
				}
			}
			//0以外の腕の数を数える
			int count=0;
			for(int i=0; i<4; i++){
				if(a[i]>0){
					count++;
				}
			}
			
			printf("min=%d min_no=%d count=%d\n", min, min_no, count);
			
			//0以外の腕の数が1だったらループ終了
			if(count==1){
				printf("%d\n", min);
				break;
			}else{
				//最小値の場所以降から最小値を引く
				for(int i=min_no+1; i<4; i++){
					a[i]-=min;
				}
			}
			
			print(a);
		}
		printf("\n");
	}
	return(0);
 }