P1618 三连击(升级版)
思路:1.因为数字不能重复,所以数据范围缩小了很多(123到987,实际上因为是从最小的开始算的,A<B<C,所以更小)2.首先判断这个数字内部有没有重复,重复直接跳过,再用比例去计算看看数字是否重复提示:可以用一个数组记录数字的使用情况#include <cstdio>#include <iostream>using namespace std;double a,b,c,
·
思路:
1.题目要求用1-9(不能重复)组成三个三位数,并且比列为A:B:C。所以首先考虑数字不能重复,所以可以将数据范围缩小(123到987,实际上因为是从最小的开始算的,A<B<C,所以更小)
2.先定最小的数字,然后按照比例算出另外两个数,然后判断每个数字的使用情况就可。
提示:可以用一个数组记录数字的使用情况
#include <cstdio>
#include <iostream>
using namespace std;
double a,b,c,j,k,flag[10],mark,cnt;
void check(int num)
{
flag[num%10]++;
flag[num/10%10]++;
flag[num/100]++;
}
int main()
{
cin>>a>>b>>c;
cnt=0;
for(double i=123;i<=987;i++)
{
for(int m=1;m<10;m++) flag[m]=0;
j=i/a*b;
k=i/a*c;
if(j>999||k>999) continue;
else
{//cout<<j<<" "<<k<<endl;
check(i);
check(j);
check(k);
//cout<<i<<" "<<j<<" "<<k<<" "<<endl;
//for(int m=1;m<10;m++) cout<<flag[m]<<" ";
//cout<<endl;
mark=0;
for(int m=1;m<10;m++)
{
if(flag[m]!=1) mark=1;
}
if(mark==0)
{
cnt++;
cout<<i<<" "<<j<<" "<<k<<" "<<endl;
}
}
}
if(cnt==0) cout<<"No!!!"<<endl;
return 0;
}
更多推荐
所有评论(0)