C语言编写 输入一组正整数(数量小于20),输出其最大公约数。 输入:121 33 44 11 1111 输出:11
发布网友
发布时间:2022-04-24 11:43
我来回答
共5个回答
热心网友
时间:2022-04-24 13:12
#include<stdio.h>
int main(int argc,char **argv)
{
int a[20];
int inputnum=0,i,j;
int min_num;
int flag=0;
int rtn=0;
printf("你想求几个数的公约数?\n");
scanf("%d",&inputnum);
if(inputnum<2 || inputnum >20)
{
printf("数的个数应大于2个小于20个!\n");
return 0;
}
printf("input %d numbers:\n",inputnum);
/*for(i=0;i<inputnum;i++)
{
printf("now,input the %d number:",i+1);
scanf("%d",&a[i]);
}*/
for(i=0;i<inputnum;i++)
{
scanf("%d",&a[i]);
printf("a[%d]=%d\n",i,a[i]);
}
min_num=a[0];
for(i=0;i<inputnum;i++)
{
if(min_num>a[i])
{
min_num=a[i]; //找到最小的数
}
}
for(i=1;i<=min_num;i++)
{
for(j=0;j<inputnum;j++)
{
if(a[j] % i==0)
{flag++;}
}
if(flag==inputnum)
{
rtn=i;
}
flag=0;
}
printf("最大公约数是:%d\n",rtn);
return 0;
}
测试过了,没什么问题。望采纳。
热心网友
时间:2022-04-24 14:30
#include <stdio.h>
int maxdivsor(int m,int n)//求m和n的最大公因子
{
int t;
if(m<n)//交换m和n
{
t=m; m=n; n=t;
}
t=m%n;
while(t!=0)
{
m=n;
n=t;
t=m%n;
}
return n;
}
int main()
{
int a[20]={0};
int i;
int cdiv;//最大公因子
printf("请输入20个正整数,中间用空格隔开:");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
cdiv=maxdivsor(a[0],a[1]);
for(i=2;i<20;i++)
cdiv=maxdivsor(cdiv,a[i]);
printf("这20个正整数的最大公因子为:%d\n",cdiv);
return 0;
}
热心网友
时间:2022-04-24 16:05
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a[20];
for (int i=0; i<20; i++) {
printf("请输入第%d个整数:",i+1);
scanf("%d",&a[i]);
printf("\n");
}
int min=a[0];
for (int i=1; i<20; i++) {
if (min>a[i]) {
min=a[i];
}
}
int maxCommom=1;
int recyeCount=0;//循环次数
for (int j=2; j<=min; j++) {
for (int i=0; i<20; i++) {
if (a[i]%j!=0)//说明不可以除尽
{
break;//跳出循环
}
else
{
recyeCount++;
}
if (recyeCount==5) {
recyeCount=0;
maxCommom=j;//最大公约数
}
}
if (j==min) {
break;
}
}
printf("最大公约数是%d\n",maxCommom);
return 0;
}
热心网友
时间:2022-04-24 17:56
# include<iostream.h>
//我习惯用C++的输入输出,你不喜欢的话可以改掉
void f()
{
int A[20],count=0; //A为存储数据的数组,count用来记录输入的数据个数。
int data;
cin>>data; //这里可以换成scanf
while(data!=0) //输入数据 以0作为结束
{
A[count]=data;
count++;
cin>>data;
}
int result=A[0],tmp;
for(int i=1;i<count;i++)
{
for(int j=A[i];j>0;j--)
{
if(result < j) continue;
if(result%j==0 && A[i]%j==0)
{
result=j;
break;
}
}
}
cout<<result; //这里可以换成printf
}
int main()
{
f();
return 0;
}追问这个题就是这样,不能以0为结束,数据要求很严格,随便加结束符会不能通过的
追答//改过了 应该能满足你的要求 回车直接就能得到结果了
# include
void f()
{
int A[20],count=0;
int data;
char ch;
cin>>data;
cin.get(ch);
while(ch!='\n')
{
A[count]=data;
count++;
cin>>data;
cin.get(ch);
}
int result=A[0];
for(int i=1;i0;j--)
{
if(result < j) continue;
if(result%j==0 && A[i]%j==0)
{
result=j;
break;
}
}
}
cout<<result;
}
int main()
{
f();
return 0;
}
热心网友
时间:2022-04-24 20:04
华为机试么是吧 西电的?我也参加,这是完全ok的程序,拿走吧
#include<iostream>
using namespace std;
int main()
{
int a=0;
cin>>a;
int b[20];
for(int l=0;l<a;l++)
{
cin>>b[l];
}
for(int i=0;i<a;i++)
for(int j=1;j<a-i;j++)
{
if(b[j]<b[j-1])
{
int temp=b[j];
b[j]=b[j-1];
b[j-1]=temp;
}
}
cout<<b[0];
int h=b[0];
int k=0;
for(;h>=1;h--)
{
for(k=0;k<a;k++)
{
if(b[k]%h!=0)
break;
}
if(k==a)
break;
}
cout<<h;
}追问你刚开始输入a了,题目没有要求呀,这样写行吗