学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

如何让它只显示一次啊??想不出来

如何让它只显示一次啊??想不出来

题目: 输入20个整数存入一个整型数组,输出其中能被数组中其它(只需其中一个)元素整除的那些数组元素。
我写的:
#include<stdio.h>
main()
{
int a[20],i,j;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
if((a[j]%a[i]==0)&&(i!=j))
printf("%d\n",a[i]);
}
}
我的会把得到的数显示很多次,怎么让它只显示一次??

TOP

#include<stdio.h>
main()
{
int a[20],b[20],k=0,i,j;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
if((a[i]%a[j]==0)&&(i!=j))
{b[k++]=a[i];break;}
}
for(j=0;j<k;j++)
printf("%3d",b[j]);
}
我测试过了,这样应该没有问题。

TOP

你们写的程序都没有考虑算法的复杂性,这类问题不要重复比较,遵循只往后看的原则:
#include<stdio.h>
void main()
{
int a[20],i,j;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
for(j=i+1;j<20;j++)
{
if(a[i]%a[j]==0)
{
printf("%d ",a[i]);
break;
}
if(a[j]%a[i]==0)
{
printf("%d ",a[j]);
break;
}
}
}
printf("\n");
}
自己比较一下,体会一下哈。

TOP

又或者,在楼主程序里面加一个break:

#include<stdio.h>
void main()
{
int a[20],i,j;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
if((a[i]%a[j]==0)&&(i!=j))
{
printf("%d ",a[i]);
break;
}
}
printf("\n");
}
就OK了/。

TOP

同意二楼的观点

TOP

都很有见解。。nb
我就是我,不是别人!

TOP

你写的程序对每一个数组元素,都那之外的每个元素进行了除运算,因此重复的输出也是不可避免的
其实这个题目也很简单的,你的目的:只要出现一个整除的元素,那么内循环你让它停止即可,这样做就没问题了
main()
{int a[20];
int i=0,j=0;
clrscr();
printf("please input a:\n");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
if(a[j]%a[i]==0 && i!=j) break;
printf("a[%d]=%d\n",i,a[i]);
}
getch();
}
不过上面写出的也只是雏形,因为马上宿舍熄灯了,所以只能那么写,你写的时候可以使之更为完善

TOP

发新话题