题目来源:蓝桥杯2015初赛 Java A组C题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
1~9的数字可以组成3个3位数,设为:A,B,C, 现在要求满足如下关系:
B = 2 * A
C = 3 * A
请你写出A的所有可能答案,数字间用空格分开,数字按升序排列。
注意:只提交A的值,严格按照格式要求输出。
问题分析
方法一:枚举三位数i=123到333(因为3333=999,不能再大了),算出i2以及i*3,再进行判定。
方法二:使用置换函数进行枚举。
AC的C语言程序如下:
/* LQ0161 九数分三组 */
#include
#include
#define N 9
char flag[N + 1];
int judge(char s[])
{
memset(flag, 0, sizeof flag);
for (int i = 0; i < N; i++) {
int t = s[i] - '0';
if (t == 0 || flag[t]) return 0;
flag[t] = 1;
}
return 1;
}
int main()
{
char s[9 + 1];
for (int i = 123; i <= 333; i++) {
sprintf(s, "%03d%03d%03d", i, i * 2, i * 3);
if (judge(s))
printf("%d ", i);
}
return 0;
}
AC的C++语言程序(置换)如下:
/* LQ0161 九数分三组 */
#include
#include
using namespace std;
char d[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a, b, c;
int judge()
{
a = d[0] * 100 + d[1] * 10 + d[2];
b = d[3] * 100 + d[4] * 10 + d[5];
if (b != a * 2) return 0;
c = d[6] * 100 + d[7] * 10 + d[8];
if (c != a * 3) return 0;
return 1;
}
int main()
{
do {
if (judge())
printf("%d ", a);
} while (next_permutation(d, d + 9));
return 0;
}