@Moritz
2019-03-29T08:19:55.000000Z
字数 1108
阅读 526
洛谷 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;//注意!会出现相乘得出来0else 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
