前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pat 520钻石争霸赛

pat 520钻石争霸赛

作者头像
废江_小江
发布2022-09-05 13:36:43
3650
发布2022-09-05 13:36:43
举报
文章被收录于专栏:总栏目

520闲来无事,无意间看到这个比赛,就去玩玩,很久没写算法,基本忘了差不多了

第一题

7-1 自动编程 (5 分) 输出语句是每个程序员首先要掌握的语句。Python 的输出语句很简单,只要写一个 print(X) 即可,其中 X 是需要输出的内容。 本题就请你写一个自动编程机,对任何一个要输出的整数 N,给出输出这个整数的 Python 语句。

输入格式:

输入给出一个不超过 10 的5次方正整数

输出格式:

在一行中打印输出这个整数的 Python 语句,其中不包含任何空格。

输入样例:

520

输出样例:

print(520)

代码

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main(){
    
    int a;
    cin>>a;
    cout<<"print("<<a<< ")"<<endl;
}

第二题

uDsg3.png
uDsg3.png
uDiUK.png
uDiUK.png

代码

代码语言:javascript
复制
#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;
	}
}

第三题

uEvNG.png
uEvNG.png

代码

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;
int main(){
  	string a;
  	cin>>a;
  	for(int i=1;i<=520;i++){
  		cout<<a<<endl;
	  }
}

以上三道算是水题了,来了就得

第四题

uExnv.png
uExnv.png

代码

代码语言:javascript
复制
#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)

第五题

uU6V0.png
uU6V0.png

代码(未ac)

代码语言:javascript
复制
#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 即可

废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:pat 520钻石争霸赛

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-20),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一题
    • 输入格式:
      • 输出格式:
        • 输入样例:
          • 输出样例:
            • 代码
            • 第二题
              • 代码
              • 第三题
                • 代码
                • 第四题
                  • 代码
                  • 第五题
                    • 代码(未ac)
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档