时间限制: 1 Sec 内存限制: 128 MB
题目描述
把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。
输入
无
输出
输出所有满足条件的三位数组合,按第一个数的升序顺序输出。
样例输出 Copy
192 384 576 .........
#include <stdio.h>
#include <stdlib.h>
int checkstr(char str[]);
int main()
{
int i ;
char str[10];
for(i=192;i<333;i++)//因为样例输出中最小为192,所以可取192为i的下限,若i==333,则2*i=666,3*i==999;则可取333为i的上限
{
sprintf(str,"%d%d%d",i,i*2,i*3);//将int型以字符串形式存入字符串str
if (checkstr(str)==1) //如果此时i满足题目条件即可输出
printf("%d %d %d\n",i,i*2,i*3 );
}
return 0;
}
int checkstr(char str[]) //判断此时的数字是否满足1,2,3,4,5,6,7,8,9组成三个三位数(每个数只能用一次)
{
int j,num[9]={0};
for(j=0;j<9;j++)
{
switch(str[j])
{
case '1':num[0]++;break;
case '2':num[1]++;break;
case '3':num[2]++;break;
case '4':num[3]++;break;
case '5':num[4]++;break;
case '6':num[5]++;break;
case '7':num[6]++;break;
case '8':num[7]++;break;
case '9':num[8]++;break;
}
}
//判断1,2,3,4,5,6,7,8,9每个数是否只用了一次
if(num[0]==1 && num[1]==1 && num[2]==1 && num[3]==1 && num[4]==1 && num[5]==1 && num[6]==1 && num[7]==1 && num[8]== 1)
return 1;
return -1;
}
本文代码和解题思想借鉴了该文章,在此表示谢意。