(强制类型转换)(有技巧的暴力枚举)
居然死在输出格式上。。
题目:
题目描述
将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
分析:
- 根据比例,遍历第一个数 再求解第二、第三个数即可。 O(n)
- 要判断第二第三个数是否是整数。
- 强制类型转换 int test0=(int)a;
- 暴力拆分所得的三个整数, 用一个数组num=[10]。 num[i]++来判断是否每个数字都出现且只出现了一次。
若无解,则输出“no!!”
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int fun(double a, double b, double c);
int main(){
double a,b,c;
double q,w;
int sign=1;
int sign2=0;
cin>>a>>b>>c;
// cout<<c/a;
for( int k=123; (k*c/a)<1000 ;++k){
q=(b/a)*k;
w=(c/a)*k;
sign=fun(k,q,w);
if(sign == 1){
cout<<k<<" "<<q<<" "<<w<<endl;
sign2=1;
}
}
if(sign2==0) cout<<"No!!!"<<endl;
}
int fun(double a, double b, double c){
int test0=(int)a;
int test1=(int)b;
int test2=(int)c;
if((b-test1!=0) || (c-test2!=0)) return 0;
int f[10]={0,0,0,0,0,0,0,0,0,0};
while(test0!=0){
f[test0%10]++;
test0=test0/10;
}
while(test1!=0){
f[test1%10]++;
test1=test1/10;
}
while(test2!=0){
f[test2%10]++;
test2=test2/10;
}
for(int i=1;i<10;++i){
if(f[i]==0) return 0;
}
return 1;
}
2017-5-16 17:24:44