求算法 题目 - 三个三位数的关系

题目 - 三个三位数的关系
描述
将 1 到 9 这九个数字分成三个 3 位数,要求第一个 3 位数,正好是第二个 3 位数的一半,是第三个 3 位数的三分之一。问该如何分。
关于输入
没有输入。
关于输出
由小到大输出满足条件的三个数字,每个数字之间用一个空格分开。
例子输入
没有输入。
例子输出
就不告诉大家答案了: )
其实我是想问有木有在C语言下一下比较好几个数的方法..?

#include<stdio.h>
void main()
{
int A,B,C,i,j,k;
for(i=1;i<10;i++)//做一个循环,在个十百位上按规律赋值
for(j=1;j<10;j++)
for(k=1;k<10;k++)
{
A=i*100+j*10+k;
B=A*2;
C=A*3;
if(k==k*2%10||k==k*3%10||k*2%10==k*3%10) continue;三组数中个位数相同则跳出循环
else if(j==(j*2+k*2/10)%10||(j*2+k*2/10)%10==(j*3+k*3/10)%10||j==(j*3+k*3/10)%10) continue; // 三组数十位相同则跳出本层循环
else if(i==(i*2+(j*2+k*2/10)/10)||(i*2+(j*2+k*2/10)/10)==(i*3+(j*3+k*3/10)/10)||i==(i*3+(j*3+k*3/10)/10) continue; //三组数中友百位数相同则跳出本层循环
else A=i*100+j*10+k; //得到的值赋给A
}
printf("A=A,B=A*2,C=A*3",A);//利用A的值输出三组数
}
//该算法的思想是按位循环,依次判断查找符合情况的三组数,这个是C程序,没在C++上运行,我在C环境运行,显示没错误,现在大三了,上来跟大家学习交流if else语句里的意思是分别查对每个数位是否相同,但是要考虑低位向高位进位的情况,所以加了低位数乘2或乘3在除以10 对于A没有必要 因为在1到9里面没有自身大于10需要进位的,呵呵,啰嗦了一大堆,希望指正,共同学习。追问

跑了一下 有問題

追答

#include
void main()
{
int i,j,k;
for(i=1;i=1) continue;
else printf("the numbers are:\n");
printf("%d %d %d\n",i*100+j*10+k,i*200+j*20+k*2,i*300+j*30+k*3);
}
} //你看一下这个 我修改了一下J 也就是十位数的if语句 出了点错误 考虑不周全 呵呵 现在改了一下 试试 我这里没有TC 但是可以在KEIL下模拟 只能看程序有没有编译错误 看不到运行结果 不好意思

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-06
参考:http://zhidao.baidu.com/question/206585760.html?fr=qrl&cid=983&index=3
#include <stdio.h>
void main()
{
int x=0;
int i,j,k;
int m1,m2,m3;
int m4,m5,m6;
for (x=123;x<=329;x++)//根据题目信息,可以大致推出第一个三位数a1范围(其余类似记为a2、a3)
{
i=x/100;//百位
j=x/10%10;//十位
k=x%10;//个位
if (i!=j&&i!=k&&j!=k&&j!=0&&k!=0)//a1各位不同,首位肯定不为0
{
m1=x*2/100;//百位
m2=x*2/10%10;//十位
m3=x*2%10;//个位
if (m1!=m2&&m1!=m3&&m2!=m3&&m2!=0&&m3!=0)//a2各位不同,首位肯定不为0
{
if (m2!=i&&m2!=j&&m2!=k&&m3!=i&&m3!=j&&m3!=k
&&m1!=j&&m1!=k)//a2与a1各位不同,a2的首位肯定不等于a1的首位,下面类似
{
m4=x*3/100;//百位
m5=x*3/10%10;//十位
m6=x*3%10;//个位
if (m4!=m5&&m4!=m6&&m5!=m6&&m5!=0&&m6!=0)//a3各位不同
{
if (m5!=i&&m5!=j&&m5!=k&&m6!=i&&m6!=j&&m6!=k
&&m5!=m1&&m5!=m2&&m5!=m3
&&m6!=m1&&m6!=m2&&m6!=m3
&&m4!=j&&m4!=k
&&m4!=m2&&m4!=m3)//与前两个三位数各位不同
printf("%d %d %d\n",x,2*x,3*x);
}
}
}
}
}
}
第2个回答  2011-11-06
192或219或273
第3个回答  2011-11-06
Option Explicit

Private Sub Command1_Click()
Dim i%, j%, k%, l%, x
For i = 111 To 333
j = i * 2: k = i * 3
x = i & j & k
For l = 1 To 9
If InStr(1, x, l) = 0 Then Exit For
Next l
If l = 10 Then Print i
Next i
Print "End"
End Sub

192
219
273
327

参考资料:VB的程序及结果,自编

相似回答