520闲来无事,无意间看到这个比赛,就去玩玩,很久没写算法,基本忘了差不多了
第一题
7-1 自动编程 (5 分)
输出语句是每个程序员首先要掌握的语句。Python 的输出语句很简单,只要写一个 print(X) 即可,其中 X 是需要输出的内容。
本题就请你写一个自动编程机,对任何一个要输出的整数 N,给出输出这个整数的 Python 语句。
输入格式:
输入给出一个不超过 10 的5次方正整数
输出格式:
在一行中打印输出这个整数的 Python 语句,其中不包含任何空格。
输入样例:
520
输出样例:
print(520)
代码
1 2 3 4 5 6 7 8 |
#include<iostream> using namespace std; int main(){ int a; cin>>a; cout<<"print("<<a<< ")"<<endl; } |
第二题
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include<iostream> using namespace std; int main(){ int m,n,s; cin>>n>>m>>s; int sum = m*s; int k = n/2; if(k>sum){ cout<<"hai sheng "<<n - sum<<" mi! jia you ya!"<<endl; }else{ cout<<"hai sheng "<<n - sum<<" mi! chong ya!"<<endl; } } |
第三题
代码
1 2 3 4 5 6 7 8 9 10 |
#include<iostream> #include<string> using namespace std; int main(){ string a; cin>>a; for(int i=1;i<=520;i++){ cout<<a<<endl; } } |
以上三道算是水题了,来了就得
第四题
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include<iostream> #include<string> using namespace std; char key; //判断string中是否存在关键数字 bool is_right(string a){ for(int i=0;i<a.length();i++){ if(a[i] == key){ return true; } } return false; } int main(){ int num,i; cin>>num; cin>>key; int sum=0;//不符合楼层综合 for( i=1;i<=num;i++){ string tmp = to_string(i);//int转为string if(is_right(tmp)){ sum++; } } cout<<num -sum<<endl; } |
快速读题从样例读取大概意思,从1-n个数中,除去有d的忌讳数字。第一感觉遍历,直接遍历从1-n,对每一个数字进行判断,获取每个数字的个位数,十位数…可以使用%10。但这里我直接存储为string类型,is_right()函数判断是否是忌讳数字d,主函数一层for循环。时间复杂度不太好计算,往后数越大,判断循环的也越大。但是基本还是o(n)
第五题
代码(未ac)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include<iostream> #include<string> #include<math.h> using namespace std; int main(){ int a;cin>>a; int sum1 = a+1; int sum2 = a; int p=0,q=0; int i; for(i = 0;;i++){ // if(pow(i,2)) for(int j =1;j<=sum1;j++){ p+=pow(i+j,2); } for(int x=1;x<=sum2;x++){ q+=pow(i+sum1+x,2); } if(p==q){ break; } p=q=0; } //i等于起步数少一 // cout<<i+1<<"^2"<<i+2 for(int l=1;l<=sum1-1;l++){ cout<<i+l<<"^2"<<" + "; } cout<<i+sum1<<"^2"<<" ="<<endl; for(int l=1;l<=sum2-1;l++){ cout<<i+sum1+l<<"^2"<<" + "; } cout<<i+sum1+sum2<<"^2"; } |
这个是没有ac的。思路还是暴力循环,直接计算等式两边的值存储到p,q中。后面两个测试点没通过,显示答案错误。一开始我还懵了。意料中的错误应该是超时。后面才想明白,应该是溢出了,p,q中的数太大,存不下去导致判断p==q时出现了错误。改成longlong 即可