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