题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
//感谢黄小U饮品完善题意
输入格式
三个数,A B C。
输出格式
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例
输入 #1
1 2 3
输出 #1
192 384 576
219 438 657
273 546 819
327 654 981
说明/提示
保证A<B<C
根据题意,暴力输出。
之前提交一次,得了六十分。二三点没过,提示short,重新看了一遍题目,结果发现漏了输出无解的情况。。。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a, b, c;
int check[10] = {0};
int tempa, tempb, tempc;
int a1, a2, a3;
int b1, b2, b3;
int c1, c2, c3;
int ans;
int main()
{
scanf("%d %d %d",&a,&b,&c);//输入三个数字a,b,c
for (int i=1;i<987;i++)//对每一个数进行遍历,到987为止,因为超过987是不可能的。
{
tempa = i * a;//得到要输出的这三个数的值
tempb = i * b;
tempc = i * c;
if (tempb > 987 || tempc > 987)break;//判定
//将得到的每一个数进行分解,分解后的各个数字存入数组中
//让数组中序号与值相同,如果不相同,那么这分解得到的数中就有重复
a1 = tempa / 100; check[a1] = a1;
a2 = tempa / 10 % 10; check[a2]=a2;
a3 = tempa % 10; check[a3]=a3;
b1 = tempb / 100; check[b1]=b1;
b2 = tempb / 10 % 10; check[b2]=b2;
b3 = tempb % 10; check[b3]=b3;
c1 = tempc / 100; check[c1]=c1;
c2 = tempc / 10 % 10; check[c2]=c2;
c3 = tempc % 10; check[c3]=c3;
//判定是否一一对应
if (check[0]==0&&check[1]==1 && check[2] == 2 && check[3] ==3 && check[4] == 4 && check[5] == 5 && check[6] == 6 && check[7] == 7 && check[8] == 8 && check[9] == 9)
{
printf("%d %d %d\n", tempa, tempb, tempc);//打印
memset(check, 0, sizeof(check));//重置数组
ans++;//ans用作判断是否有解,无解就一直是0
}
else
{
memset(check, 0, sizeof(check));
//数组被使用过,要重置数组,
}
}
if (!ans)printf("No!!!");//无解时输出。
return 0;
}