01:统计数字字符个数
#include<bits/stdc++.h>
using namespace std;
char a[300];
int main()
{ gets(a);
int k=0,i;
for(i=0;i<=sizeof(a);i++)
if (a[i]<='9'&&a[i]>='0' ) k++;
cout<<k<<endl;
}
02:找第一个只出现一次的字符
#include <bits/stdc++.h>
using namespace std;
char a[100000];
int main () {
cin>>a;
for(int i=0; i<strlen(a); i++) {
if(strchr(a,a[i])==strrchr(a,a[i])) {
cout<<a[i];
return 0;
}
}
cout<<"no";
}
#include<bits/stdc++.h>
using namespace std;
char a[100001];
int main()
{ int i,j,t=0;
gets(a);
for(i=0;i<strlen(a);i++)
{ t=0;
for(j=0;j<strlen(a);j++)
{
if(a[i]==a[j]) t++;
//if(t>=2) continue ;
}
if(t==1) {cout<<a[i]; return 0;}
}
cout<<"no";
}
03:基因相关性
#include<bits/stdc++.h>
using namespace std;
char a[500],b[500];
double s,num=0.00;
int sum=0;
int main()
{ cin>>s;
scanf("%s",a);
scanf("%s",b);
sum=strlen(a);
for(int i=0;i<sum;i++)
if(a[i]==b[i]) num++;
if(num/sum>=s) printf("yes");
else printf("no");
return 0;
}
4、石头剪子布
#include<bits/stdc++.h>
using namespace std;
char a[101];
char b[101];
char kongge[3];
int ans[1001];
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) {
scanf("%s",&a);
scanf("%s",&b);
if(a[0]=='R'&&b[0]=='R')ans[i]=0;
if(a[0]=='S'&&b[0]=='S')ans[i]=0;
if(a[0]=='P'&&b[0]=='P')ans[i]=0;
if(a[0]=='R'&&b[0]=='S')ans[i]=1;
if(a[0]=='R'&&b[0]=='P')ans[i]=2;
if(a[0]=='S'&&b[0]=='R')ans[i]=2;
if(a[0]=='S'&&b[0]=='P')ans[i]=1;
if(a[0]=='P'&&b[0]=='S')ans[i]=2;
if(a[0]=='P'&&b[0]=='R')ans[i]=1;
}
for(int i=1; i<=n; i++) {
if(ans[i]==0) {
cout<<"Tie"<<endl;
} else if(ans[i]==1) {
cout<<"Player1"<<endl;
} else if(ans[i]==2) {
cout<<"Player2"<<endl;
}
}
return 0;
}
5、输出亲朋字符串
#include<bits/stdc++.h>
using namespace std;
char s[105],s1[105];
int main()
{
gets(s);
for(int i=0;i<strlen(s);i++)
if(i!=strlen(s)-1)
s1[i]=s[i]+s[i+1];
else
s1[i]=s[i]+s[0];
puts(s1);
}
6、合法 C 标识符
#include<bits/stdc++.h>
using namespace std;
int main()
{ int i,num;
char a[21];
gets(a);
num=strlen(a);
if(a[0]>='0'&&a[0]<='9')
{ cout<<"no";
return 0;
}
for(i=0;i<num;i++)
if(!(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'||a[i]>='0'&&a[i]<='9'||a[i]=='_'))
{ cout<<"no"; return 0;}
cout<<"yes";
return 0;
}
7、配对碱基链
#include<bits/stdc++.h>
using namespace std;
int main()
{ char a[256];
gets(a);
for(int i=0;i<strlen(a);i++)
{ if(a[i]=='A') printf("%c",'T');
if(a[i]=='G') printf("%c",'C');
if(a[i]=='T') printf("%c",'A');
if(a[i]=='C') printf("%c",'G');
}
return 0;
}
8、字符替换
#include<bits/stdc++.h>
using namespace std;
char a[80],b[80],s,d;
int c;
int main()
{ cin>>a>>s>>d;
for(int i=0;i<strlen(a);i++)
if(a[i]==s) a[i]=d;
cout<<a;
}
9、密码翻译
#include<bits/stdc++.h>
using namespace std;
int main()
{ char a[100];
cin.getline(a,sizeof(a));
for (int i=0;i<sizeof(a);i++)
{ if ((a[i]<'z' && a[i]>='a')||(a[i]<'Z' && a[i]>='A'))a[i]++;
else if (a[i]=='z') a[i]='a';
else if (a[i]=='Z') a[i]='A';
}
cout<<a;
return 0;
}
10、简单密码
#include<bits/stdc++.h>
using namespace std;
int main()
{ char a[202];
gets(a);
//cin.getline(a,sizeof(a));
for (int i=0;i<strlen(a);i++)
{ if(a[i]>='A'&&a[i]<='Z')
if (a[i]<'F') a[i]+=26-5;
else a[i]-=5 ;
}
cout<<a;
return 0;
}
11、字符串匹配
12、加密的病历单
13、将字符串中的小写字母转换成大写字母
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[101];
gets(a);
for(int i=0;i<strlen(a);i++)
{if(a[i]>='a'&&a[i]<='z')
a[i]=a[i]-32;
cout<<a[i];
}
}
14、大小写字母互换
#include<bits/stdc++.h>
using namespace std;
char a[88];
int main(){
gets(a);
for(int i=0;i<=strlen(a);i++){
if(a[i]>='a'&&a[i]<='z'){a[i]-=32;continue;}
else if(a[i]>='A'&&a[i]<='Z')a[i]+=32;
}
cout<<a;
return 0;
}
15、整理药名
16、忽略大小写的字符串比较
#include<bits/stdc++.h>
using namespace std;
int main()
{ char a[81],b[81];
gets(a);
gets(b);
if(strcasecmp(a,b)>0) cout<<">";
if(strcasecmp(a,b)<0) cout<<"<";
if(strcasecmp(a,b)==0) cout<<"=";
return 0;
}
17、字符串判等
#include<bits/stdc++.h>
using namespace std;
string a,b;
int la,lb,i;
int gys(int a,int b)
{ int t;
while(b!=0)
{ t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{ while(1)
{ cin>>a;
if(a=="-1")break;
cin>>b;
la=a.size();
lb=b.size();
int max=0;
for(i=0;i<la;i++)
{ int temp=0;
for(int j=0,k=i;j<lb&&k<la;j++,k++)
if(a[k]==b[j]) temp++;
if (max<temp) max=temp;
}
for(int i=0;i<lb;i++)
{ int temp=0;
for(int j=0,k=i;j<la&&k<lb;j++,k++)
if(a[j]==b[k]) temp++;
if (max<temp)max=temp;
}
max*=2;
printf("appx(%s,%s)=",a.c_str(),b.c_str());
if(max==0){printf("0\n"); continue; }
if(max==la+lb){printf("1\n"); continue; }
int temp=gys((lb+la),max);
printf("%d/%d\n",max/temp,(lb+la)/temp);
}
}
18、验证子串
19、字符串移位包含问题
#include<bits/stdc++.h>
using namespace std;
int main()
{ string a,b;
cin>>a>>b;
if(a.size()<b.size()) swap(a,b);
a=a+a;
if(a.find(b)!=string::npos) cout<<"true";
else cout<<"false";
}
20、删除单词后缀
#include<bits/stdc++.h>
using namespace std;
string a;
int main()
{ getline(cin,a);
if(a[a.size()-2]=='e'&&a[a.size()-1]=='r') a.erase(a.size()-2,2);
else if(a[a.size()-2]=='l'&&a[a.size()-1]=='y') a.erase(a.size()-2,2);
else if(a[a.size()-3]=='i'&&a[a.size()-2]=='n'&&a[a.size()-1]=='g')
a.erase(a.size()-3,3);
cout<<a;
return 0;
}
21、单词替换
22、紧急措施
23、过滤多余的空格
24、单词的长度
#include <bits/stdc++.h>
using namespace std;
int main()
{ char t[20];
cin>>t;
cout<<strlen(t);
while(cin>>t)
cout<<","<<strlen(t);
}
25、最长最短单词
26、字符串最大跨距
27、单词翻转
28、单词倒排
29、字符串乘方
30、字符环
#include<bits/stdc++.h>
using namespace std;
int main()
{ string a,b,s1,s2,k,s3,s4;
cin>>a>>b;
s1=a.size()<=b.size()?a:b;
s2=a.size()>b.size()?a:b;
s3=s1+s1;
s4=s2+s2;
int max=0;
for(int i=0;i<s1.size();i++)
for(int j=1;j<=s1.size();j++)
{ k=s3.substr(i,j);
if(s4.find(k,0)!=string::npos )
if(k.size()>max) max=k.size();
}
cout<<max;
}
31:字符串p型编码
32:行程长度编码
33:判断字符串是否为回文
34:回文子串
35、数字游戏 NOIP2019复赛 普及组 第一题
#include<iostream>
using namespace std;
int ans=0;//ans计数器
char s[21];//字符串开大一点
int main()
{ cin>>s;
for(int i=0;i<8;i++)
if(s[i]=='1') ans++; //判断是否为1,是计数器++
cout<<ans<<endl;
return 0;//完美结束
}
36、标题统计 NOIP2018复赛 普及组 第一题
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char s[10];
gets(s);
int n=strlen(s);
int ans=0;
for(int i=0;i<n;i++)
{
if(s[i]>='A'&&s[i]<='Z')
ans++;
if(s[i]>='a'&&s[i]<='z')
ans++;
if(s[i]>='0'&&s[i]<='9')
ans++;
}
printf("%d",ans);
return 0;
}
37、扫雷游戏 NOIP2015复赛 普及组 第一题
#include<bits/stdc++.h>
using namespace std;
char c[101][101];
int main()
{ int a,b;
cin>>a>>b;//输入矩阵大小
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
cin>>c[i][j];//输入每个位置上的情况
for(int i=0;i<a;i++)
{ for(int j=0;j<b;j++)//循环输出,判断周围是否有雷
{ int sum=0;
if(c[i][j]=='*') cout<<'*';//如果该位置有雷,直接输出‘*’
else //判断,周围有雷自+1;
{ if(c[i-1][j+1]=='*') sum++;
if(c[i][j+1]=='*') sum++;
if(c[i+1][j+1]=='*') sum++;
if(c[i-1][j]=='*') sum++;
if(c[i+1][j]=='*') sum++;
if(c[i-1][j-1]=='*') sum++;
if(c[i][j-1]=='*') sum++;
if(c[i+1][j-1]=='*') sum++;
cout<<sum;//判断完毕后直接输出sum
}
}
cout<<endl;//换行
}
return 0;
}
38、计数问题 NOIP2013复赛 普及组 第一题
#include<bits/stdc++.h>
using namespace std;
int n,x,sum=0;
int main()
{ cin >>n>>x;
for (int i=1;i<=n;++i)
{ if (i>=1000000 && i/1000000==x) sum++;
if (i>=100000 && i/100000 %10==x) sum++;
if (i>=10000 && i/10000 %10==x) sum++;
if (i>=1000 && i/1000 %10==x) sum++;
if (i>=100 && i/100 %10==x) sum++;
if (i>=10 && i/10 %10==x) sum++;
if (i%10==x) sum++;
}
cout<<sum;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int cnt(int n,int x)
{ vector<int> vn;
while(n!=0)
{ vn.push_back(n%10);
n/=10;
}
return count(vn.begin(),vn.end(),x);
}
int main()
{ int a,b,sum=0;
cin>>a>>b;
for(int i=1;i<=a;i++) sum+=cnt(i,b);
cout<<sum<<endl;
}
39、 数字反转 NOIP2011复赛 普及组 第一题
#include<bits/stdc++.h>
using namespace std;
int main()
{ int n,k;
cin>>n;
int sum=0;
while(n!=0)
{ int k=n%10;
sum=sum*10+k;
n=n/10;
}
cout<<sum<<endl;
return 0;
}
#include<bits/stdc++.h>//万能头
using namespace std;
stack<char> p;//定义stack
int main()
{ char c;
while((c=getchar())!='\n')
{ if(c=='-')printf("-");//判断正负,如果是负就直接输出,不压栈
else p.push(c);//否则压进栈里
}
while(p.top()=='0') p.pop(); //删除前导0
while(!p.empty())//最后输出反转数
{ printf("%c",p.top());
p.pop();
}
return 0;//完美结尾
}
40:ISBN号码 NOIP2008复赛 普及组 第一题
#include<bits/stdc++.h>//万能头
using namespace std;
string s;
int main()
{ cin>>s;//string类型只能够用cin读入
int tell=s.at(0)-48+(s.at(2)-48)*2+(s.at(3)-48)*3+(s.at(4)-48)*4+(s.at(6)-48)*5
+(s.at(7)-48)*6+(s.at(8)-48)*7+(s.at(9)-48)*8+(s.at(10)-48)*9;//得到应该得到的值:因为at返回的是一个字符,所以说要减去'0'(48),根据题意,得到这个算式
char right=tell%11+48;//正确的最后一位的值
if(right>'9') right='X';//因为module 11 之后可能会有10,根据题意得到'X'
if(right==s.at(12)) cout<<"Right";//如果相等,那就是正确的
else//否则
{ for(int i=0;i<=11;++i) cout<<s.at(i);//从0~10输出前面的字符
cout<<right;//然后输出正确的最后一位
}
return 0;
}
#include<bits/stdc++.h>//万能头
using namespace std;
int main()
{ char s[14],c;
cin>>s;
int h=0,k=0;
for(int i=0;i<11;i++)
if(s[i]!='-'){k++; h+=k*(s[i]-'0');}//-0是为了将字符串变成普通数字
h%=11;
if(h==10) c='X'; else c=h+'0';
if(c==s[12]) cout<<"Right"<<endl;
else {s[12]=c;cout<<s;}
return 0;
}
41、统计单词数 NOIP2011复赛 普及组 第二题
#include <bits/stdc++.h>
using namespace std;
int main()
{ string a;
string b;
getline(cin,a);
getline(cin,b);
for (int i=0;i<a.length();++i) //转换大小写,可以都转换为大写,或者小写
a[i]=tolower(a[i]);
for (int i=0;i<b.length();++i)
b[i]=tolower(b[i]);
a=' '+a+' ';//因为连起来的不算,所以要在前后加几个空格,一定要是同样多的,同量减同量,等于同量
b=' '+b+' ';
if (b.find(a)==string::npos)//先看看会不会找不到,用a.find()和string::npos
cout<<-1<<endl;
else
{ int alpha=b.find(a); //存取第一个位置
int beta=b.find(a),s=0;//计数器初始化为0
while (beta!=string::npos)
{ ++s;//计数器
beta=b.find(a,beta+1);
}
cout<<s<<" "<<alpha<<endl;//输出第一个和总共有几个
}
}
42、Vigenère 密码 NOIP2012复赛 提高组 第一题
简单来说,就是明文字母=密文字母-密钥字母(当然还要考虑转回来比如a到z)
#include <iostream>
using namespace std;
int main()
{ string k,c;
cin>>k>>c;
for (int i=0;i<c.length();i++)
{ int t=(k[i%k.length()]&31)-1;
c[i]=(c[i]&31)-t>0?c[i]-t:c[i]-t+26;
}
cout<<c<<endl;
return 0;
}