本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。
输入格式:
木有输入
输出格式:
若干行,每行33个数字。按照每行第11个数字升序排列。
输入样例#1: 复制
无
输出样例#1: 复制
192 384 576 * * * ... * * * (输出被和谐了)
额,这一题只是想到了要把第一个数字a的范围算出来,最小肯定是123,最后一个数最大是987,除以三就是329,那么第一个数字的范围就是123到329,然后表示出b=2a,c=3a,然后分别求出每个数的个位十位百位。到这里我一开始的判断条件是不够完整的,导致数据太多,后来参考大佬的,发现只要他们相乘等于1*2*3*4*5*6*7*8*9即可。
#include
using namespace std;
int main(){
int a,b,c;
int agw,asw,abw,bgw,bsw,bbw,cgw,csw,cbw;
for(a=123;a<329;a++){
b=2*a;
c=3*a;
agw=a%10;
bgw=b%10;
cgw=c%10;
asw=a/10%10;
bsw=b/10%10;
csw=c/10%10;
abw=a/100;
bbw=b/100;
cbw=c/100;
if((agw*asw*abw*bgw*bsw*bbw*cgw*csw*cbw==1*2*3*4*5*6*7*8*9)&&
(agw+asw+abw+bgw+bsw+bbw+cgw+csw+cbw==45))
{
cout<
然后然后,我又在网上参考了一位大佬的代码,发现除了这种暴力的判断,还可以用哈希的思想,新建一个数组x[9]全部值赋为0,然后把这三个数各位一共九个数字,比如,agw=2,那么就把x[awg]=1,这样就表示2已经存在,直至x[10]从x[1]开始每个都为1时,答案就出来了。
#include
#include
using namespace std;
int main(){
int a,b,c;
int agw,asw,abw,bgw,bsw,bbw,cgw,csw,cbw;
int x[10]={0};
for(a=123;a<329;a++){
memset(x,0,sizeof(x));
b=2*a;
c=3*a;
agw=a%10;
bgw=b%10;
cgw=c%10;
asw=a/10%10;
bsw=b/10%10;
csw=c/10%10;
abw=a/100;
bbw=b/100;
cbw=c/100;
x[agw]=1;
x[asw]=1;
x[abw]=1;
x[bgw]=1;
x[bsw]=1;
x[bbw]=1;
x[cgw]=1;
x[csw]=1;
x[cbw]=1;
if(x[1]==1&&x[2]==1&&x[3]==1&&x[4]==1&&x[5]==1&&x[6]==1&&x[7]==1&&x[8]==1&&x[9]==1)
cout<