紫书(一)第3章数组和字符串 UVA - 272 UVA - 10082 UVA - 401 UVA - 340 UVA - 1583 UVA - 1584

虽然自己写过很多题,也参加很多比赛,但是因为自己是半路”出家“,起步也比较慢,一开始就是针对比赛学习得。然后还是比较菜得感觉,有时候可能比较机智吧。但个人还是感觉什么都不好得,有些知识仅仅是知道,但是写不出来,目前水平就是一些例如简单dp,图论的,搜索,简单数论,然后就是思维模拟,= =。虽然大三了,还是决定从头开始学一本书。从头开始刷一本书,系统得学习一下。

 

TEX Quotes

UVA - 272

题意:就是让你把奇数 " 换成 `` 和偶数 " 换成  '' 。wa了好几次。因为用的是getline(cin,s)。不能读取换行。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
	int flag=0;
	char s;
	while(~scanf("%c",&s)){
		if(s=='"'){
			flag==0?cout<<"``":cout<<"''";
			flag=flag?0:1;		
		}
		else cout<<s; 
	
	}
	return 0;
} 

 

WERTYU

UVA - 10082  

题意&思路:没有什么思路,又wa了几次,原因是没有加上数字1234.。。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
string s0="`1234567890-=";
string s="QWERTYUIOP[]\\";
string s2="ASDFGHJKL;'";
string s3="ZXCVBNM,./";
int main(){
	char str;
	while(~scanf("%c",&str)){
		int flag=0;
		for(int j=1;j<s0.size();j++){
			if(s0[j]==str){
				 cout<<s0[j-1],flag=1;
				 break;
			}
		}
		if(flag) continue;
		for(int j=1;j<s.size();j++){
			if(s[j]==str){
				 cout<<s[j-1],flag=1;
				 break;
			}
		}
		if(flag) continue;		
		for(int j=1;j<s2.size();j++){
			if(s2[j]==str){
				 cout<<s2[j-1],flag=1;
				 break;
			}
		}
		if(flag) continue;
		for(int j=1;j<s3.size();j++){
			if(s3[j]==str){
				 cout<<s3[j-1],flag=1;
				 break;
			}
		}
		if(flag) continue;
		else cout<<str;
	}	
	return 0;
}

 

Palindromes

UVA - 401

题意思路:问这个串是不是回文串和是不是镜像串。错了几次。原因是在判断是不是镜像的时候,串为奇数中间得那个字母也要判断。

#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
string s="AEHIJLMOSTUVWXYZ12358";
string rs="A3HILJMO2TUVWXY51SEZ8";
int main(){
	string  str;
	while(getline(cin,str)){
		int flag0=0,flag1=0;
		//是否为pai
		int l=0,r=str.size()-1;
		while(l<r){
			if(str[l]!=str[r]) flag0=1;//no pa
			if(flag0) break; 
			l++;r--;
		}
		l=0;r=str.size()-1;
		while(l<=r){
			int tmp=0;
			for(int i=0;i<21;i++){
				if(str[l]==s[i]&&str[r]==rs[i]) tmp=1; 
			}
			if(!tmp) flag1=1;//no mi
			if(flag1) break;
			l++,r--;
		}
		if(!flag0&&!flag1) cout<<str<<" -- is a mirrored palindrome."<<endl;
		else if(!flag0) cout<<str<<" -- is a regular palindrome."<<endl;
		else if(!flag1) cout<<str<<" -- is a mirrored string."<<endl;
		else  cout<<str<<" -- is not a palindrome."<<endl;
		cout<<endl;
	} 
	return 0;
}

Master-Mind Hints

UVA - 340

题意思路:讲道理,看来好久没看懂题意。大意是给你一个答案序列,和一堆猜测得序列。问每个猜测序列中,有多少个(A)猜对得(序列位置相同数字相同),有多少个(B)虽然猜对了,但是位置不一样。输出(A,B) (我在输出这里pe了。。) 这里要注意,B得数目是在A得数目去掉之后。例如答案序列1123 猜测1111 答案是(2,0)之后得11并不能算作B

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000+10;
int a[10],b[10],c[10];
int s[maxn],g[maxn];
int main(){
	int n,t=1;
	while(scanf("%d",&n)!=EOF&&n){
		printf("Game %d:\n",t);t++;
		memset(b,0,sizeof(b));
		for(int i=0;i<n;i++) cin>>s[i],b[s[i]]++;
		while(1){
			for(int i=0;i<10;i++) {
				a[i]=b[i],c[i]=0;
			}
			int flag=0,cnt=0,cnt1=0;
			for(int i=0;i<n;i++){
				cin>>g[i];
				if(g[i]) flag=1;
				if(g[i]==s[i]) cnt++,a[s[i]]--; 
				else c[g[i]]++;//出现次数		
			}
			for(int i=0;i<10;i++){
				cnt1+=min(a[i],c[i]);
			}
			if(!flag) break;
			printf("    (%d,%d)\n",cnt,cnt1);
		}
		
	}
	return 0;
}

Digit Generator

UVA - 1583

题意思路:题意很明确。就是找给定n得最小得m n=(m+m得个位数字相加)。新手可能会tle,注意下n和m相差得范围。就好理解了。m+m得位数相加。然而m位数相加是固定得。 

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int n,t;
	cin>>t;
	while(t--){
		int ans=0,cnt=0;
		cin>>n;
		int tmp=n;
		while(tmp){
			cnt++;
			tmp/=10;
		}
		for(int i=n-cnt*11;i<=n;i++){
			int sum=0;
			tmp=i;
			while(tmp){
				sum+=tmp%10;tmp/=10;
			}
			if(i+sum==n){
				ans=i;break;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

Circular Sequence

UVA - 1584

题意思路:给定一个循环序列,找出这个序列从某个字母开始的字典序最小的序列。直接扩展两倍,找前面的长度。记录最小的字典序。遇到首字母相同的比较更新,遇到不同的且小于当前保存的,替换答案。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
int cnt,mm;
string a[maxn]; 
int main(){
	int n;
	string s;
	cin>>n;
	while(n--){
		cin>>s;
		cnt=0;mm=1000;
		string ans;
		int len=s.size();
		s=s+s;//扩展
		for(int i=0;i<len;i++){
			if(s[i]-'0'<mm){
				mm=s[i]-'0';cnt=0;
				ans=s.substr(i,len);
			}
			else if(s[i]-'0'==mm){
				string tmp=s.substr(i,len);
				if(tmp<ans) ans=tmp;
			}
		}
		cout<<ans<<endl;
	}
	return 0;

}

最小表示法O(n) 

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int get(string s){
	int len=s.size();
	int i=0,j=1,k=0,t;
	while(i<len&&j<len&&k<len){
		t=s[(i+k)%len]-s[(j+k)%len];
		if(!t) k++;
		else{
			if(t>0) i+=k+1;
			else j+=k+1;
			if(i==j) j++;
			k=0;
		}
	}
	return i>j?j:i;
}
int main(){
	int n;
	string s;
	cin>>n;
	while(n--){
		cin>>s;
		int len=s.size();
		int t=get(s);
		s+=s;
		cout<<s.substr(t,len)<<endl;
	}
	return 0;
}

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值