注册 登录
编程论坛 新人交流区

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

dax 发布于 2007-11-20 15:47, 1000 次点击

题目: 输入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]);
}
}
我的会把得到的数显示很多次,怎么让它只显示一次??

6 回复
#2
land9452007-11-20 17:42

#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]);
}
我测试过了,这样应该没有问题。

#3
lijitaoccnu2007-11-20 18:39
你们写的程序都没有考虑算法的复杂性,这类问题不要重复比较,遵循只往后看的原则:
#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");
}
自己比较一下,体会一下哈。
#4
lijitaoccnu2007-11-20 21:08

又或者,在楼主程序里面加一个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了/。

#5
szb1232007-11-20 21:51
同意二楼的观点
#6
zhouqingwuji2007-11-20 22:48
都很有见解。。nb
#7
seavoice2007-11-20 23:35
你写的程序对每一个数组元素,都那之外的每个元素进行了除运算,因此重复的输出也是不可避免的
其实这个题目也很简单的,你的目的:只要出现一个整除的元素,那么内循环你让它停止即可,这样做就没问题了
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();
}
不过上面写出的也只是雏形,因为马上宿舍熄灯了,所以只能那么写,你写的时候可以使之更为完善
1