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

2021da3.cppの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
 #include <stdio.h>
 #include <stdlib.h>
 
 //2数の最大公約数を返す
 int gcd(int a, int b)
 {
  if(b==0) {
    return a;
  } else if((a%b)==0) {
    return b;
  } else {
    return gcd(b, a%b);
  }
 }
 //小さい順に挿入ソート
 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);
		
		//0以外の椀の数を数える
		int count=0;
		for(int i=0; i<4; i++){
			if(a[i]>0){
				count++;
			}
		}
		
		//小さい順にソート
		sort(a, 4);
		
		int n;
		//0以外が4つだったら、1個目と2個目の最大公約数と
		//3個目と4個目の最大公約数の、最大公約数
		if(count==4){
			n=gcd(gcd(a[0],a[1]), gcd(a[2],a[3]));
		//0以外が3つだったら、2個目と、3個目と4個目の最大公約数の、最大公約数
		}else if(count==3){
			n=gcd(a[1], gcd(a[2],a[3]));
		//0以外が2つだったら、3個目と4個目の最大公約数
		}else{
			n=gcd(a[2], a[3]);
		}


 
		printf("%d\n", n);
	}
	return(0);
  }