@Moritz
2019-03-29T08:19:55.000000Z
字数 1108
阅读 443
洛谷
C++
所有文稿
将共9个数分成3组,分别组成3个三位数,且使这3个三位数构成的比例,试求出所有满足条件的3个三位数。
比较入门的一道算法题,写出来是因为有一个小坑没有注意到
#include <iostream>
#include <cmath>
#include <set>
using namespace std;
int n_i(int x,int y,int z){
return x*100+y*10+z;
}
void divide(int &x,int &y,int &z,int sum){
x=sum/100;
y=sum/10-x*10;
z=sum%10;
}
int a[3];
bool en=false;
void solve(int cur){
if(cur>=3){
int sum=n_i(a[0],a[1],a[2]);
int sum2=sum*2,sum3=sum*3;
if(sum3>999) return;
int b[6];
set<int> cnt;
cnt.insert(a[0]);
cnt.insert(a[1]);
cnt.insert(a[2]);
divide(b[0],b[1],b[2],sum2);
divide(b[3],b[4],b[5],sum3);
for(int x=0;x<6;x++){
if (cnt.count(b[x])||!b[x]) return;//注意!会出现相乘得出来0
else cnt.insert(b[x]);
}
if(en) cout<<endl;
else en=true;
cout<<sum<<" "<<sum2<<" "<<sum3;
return;
}
if (!cur){
for(int i=1;i<=3;i++){
a[cur]=i;
solve(1);
}
}
else{
for(int i=1;i<=9;i++){
bool ok=true;
for(int j=0;j<cur;j++){
if (a[j]==i){
ok=false;break;
}
}
if (ok){
a[cur]=i;
solve(cur+1);
}
}
}
}
int main(){
solve(0);
return 0;
}
级数求和要注意精度,一开始用float
精度不足,导致两个WA
#include <iostream>
#include <cmath>
#include <set>
using namespace std;
int main(){
int k;
cin>>k;
double sum=0.0;//注意 要用双精度
for(int i=1;;i++){
sum+=1.0/i;
if(sum>k){
cout<<i;
break;
}
}
return 0;
}
2019.3.25