C语言程序设计问题

求所有这样的三位数;它的2倍数、3倍还是三位数,且这三个三位数使用1到9之间不同的数字,如:n=192,2n=384,3n=576
这是一个C语言问题,因为要把数学问题变成C代码

#include<stdio.h>

int a,b,c,i;

void main()

{

 for(i=100;i<1000;i++)

 {

  a=i/100;   b=(i%100)/10;   c=i%10;

  if((a!=b)&&(a!=c)&&(b!=c))

  {

   if((i%2)==0&&(i%3==0))

    printf("%d  ",i);

  }

 }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-24
2楼的漏掉条件:这三个三位数使用1到9之间不同的数字
3楼的漏掉条件:它的2倍数、3倍还是三位数

首先这个数本身就是3位数,如果3倍数是三位数,那么2倍数明显也是三位数
for (n=100;n<1000/3;n++)即保证n是三位数,且n的3倍数小于1000即也为三位数

结果:192 219 267 273 327

#include "stdio.h"
void main()
{
int n,a[9],i,j,m;
for (n=100;n<=1000/3;n++)
{
m=1;
a[0]=n/100;
a[1]=(n-a[0]*100)/10;
a[2]=n%10;
a[3]=2*n/100;
a[4]=(2*n-a[3]*100)/10;
a[5]=2*n%10;
a[6]=3*n/100;
a[7]=(3*n-a[6]*100)/10;
a[8]=3*n%10;
for(i=0;i<8&&m;i++)
for(j=i+1;j<9&&m;j++)
if(a[i]-a[j]==0)
{
m=0;
}
if (m==1)printf("%5d",n);
}
printf("\n");
}本回答被提问者采纳
第2个回答  2010-12-24
运行结果:
192,384,576
219,438,657
273,546,819
327,654,981

int IsIt(int n)
{
int i=0,k;
int f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8=0,f9=0;
int a[9];
k = n*3 + n*1000*2 + n*1000*1000;
while(k!=0)
{
a[i++]=k%10;
k = k/10;
}
for(i=0;i<9;i++)
{
switch(a[i])
{
case 1: f1=1; break;
case 2: f2=1; break;
case 3: f3=1; break;
case 4: f4=1; break;
case 5: f5=1; break;
case 6: f6=1; break;
case 7: f7=1; break;
case 8: f8=1; break;
case 9: f9=1; break;
}
}
if((f1==1)&&(f2==1)&&(f3==1)&&(f4==1)&&(f5==1)&&(f6==1)&&(f7==1)&&(f8==1)&&(f9==1))
return 1;
else
return 0;
}
void main()
{
int i=111;
for(i=111;i<333;i++)
{
if( IsIt(i))
printf("%d,%d,%d\n",i,i*2,i*3);
}
getche();
}
第3个回答  2010-12-24
192 384 576
219 438 657
273 546 819
327 654 981
正确结果!
#include <stdio.h>

int main()
{
int data = 123;
int data2 = 0;
int data3 = 0;
char pszCheck[10];
int i = 0;
for ( ; data <= 333; ++data)
{
data2 = 2 * data;
data3 = 3 * data;
memset(pszCheck, 0x00, 10);
pszCheck[data/100] = 1;
pszCheck[(data%100)/10] = 1;
pszCheck[data%10] = 1;

pszCheck[data2/100] = 1;
pszCheck[(data2%100)/10] = 1;
pszCheck[data2%10] = 1;

pszCheck[data3/100] = 1;
pszCheck[(data3%100)/10] = 1;
pszCheck[data3%10] = 1;

for ( i = 1; i < 10; i++)
{
if ( pszCheck[i] == 0 )
break;
}
if ( 10 == i )
printf("%3d %d %d\n", data, data2, data3);
}
return 0;
}
第4个回答  2010-12-24
程序由102开始找,每次加6,因为是2,3的倍数,也就是6的倍数,所以加6
#include<stdio.h>
void main()
{ int i,n,j,a[10];
for(i=102;i<=999;i=i+6)
{for(j=0;j<10;j++)a[j]=0;
n=i;
while(n!=0)
{if(a[n%10]!=0)break;
a[n%10]=1;
n=n/10;
}
if(n==0)printf("%d\n",i);
}
system("PAUSE");
}
相似回答