トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF 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);
}