zoukankan      html  css  js  c++  java
  • Openjudge 1.7 字符串

    1.7.9 字母后移

    读入一行的代码:

    while((k=getchar())!=EOF)
    

    ASCII码

    小写(a) 97

    小写(z) 122

    大写(A) 65

    大写(Z) 90

    数字0 (48)

    数字9 (57)

    //1.7.9
    #include<bits/stdc++.h>
    using namespace std; 
    int main()
    {
        char p[85];
        char k;
        int i=0;
        while((k=getchar())!=EOF){
        	if(k>=65&&k<=89) k++;
    		else if(k==90) k=65;
    		else if(k>=97&&k<=121) k++;
    		else if(k==122) k=97;
    		//else if(k==32) putchar('32');
    		p[i]=k;
    		i++;
    		putchar(k); 
    	}
        //puts(p);
        return 0;
    }
    

    1.7.11 潜伏者

    //1.7.11?
    #include <algorithm>
    #include <iostream>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define N 1020
    char s1[N],s2[N],s3[N];
    int a[26];
    bool fail = 0;
    int main(){
    	scanf("%s%s%s",s1,s2,s3);
    	for(int i=0;i<26;i++){
    		a[i]=-1;
    	}
    	int len=strlen(s1);
    	if(len<26) fail=1;
    	else{
    		for(int i=0;i<len;i++){
    			if(a[s1[i]-'A'] == -1){
    				a[s1[i]-'A']=s2[i]- 'A';
    			}else{
    				if(a[s1[i]-'A']!= s2[i]- 'A'){
    					fail = 1;
    					break;
    				}
    			}
    		}
    		for(int i = 0;i<26;i++){
    			if(a[i]==-1){
    				fail = 1;
    				break;
    			}
    		}
    		for(int i = 0;i<26;i++){
    			for(int j=i+1;j<26;j++){
    				if(a[i]==a[j]){
    					fail = 1;
    					break;
    				}
    			}
    		}
    	}
    	if(fail == 1){
    	  cout<<"Failed"<<endl;
    	}
    	else{
    		len = strlen(s3);
    		for(int i = 0; i <len;++i)
    			s3[i]=a[s3[i]-'A']+'A';
    		printf("%s
    ",s3);
    	}
    	return 0;
    }
    

    1.7.18 验证子串

    #include <cstirng>
      strstr(a,b);
    

    返回值是1或0,用于判断是否是子串

    //1.7.18
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    char a[205],b[205];
    
    int main( ){
    	gets(a);
    	gets(b);
    	int len1,len2;
    	len1=strlen(a);len2=strlen(b);
    	bool op=0;
    	if(len2>len1){
    		swap(a,b);
    		swap(len1,len2);
    	}
    	if(strstr(a,b)) printf("%s is substring of %s",b,a);
    	else printf("No substring"); 
    	return 0;
    }
    

    1.7.24 单词的长度

    把下列语句修改一下就好了【这告诉我们(<iostream>)不可靠】

    cout>>s>>" ,"; //原来
    printf("%d,",s);//现在
    

    有可能""(双引号)打成‘’(单引号)了一开始没发现

    所以还是(printf)

    //1.7.24
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    char a[2001];
    int s=0;
    int main(){
         gets(a);
         int l=strlen(a);
         for(int i=0;i<l;i++)
         {
             if(a[i]!=' ') s++;
             else if(a[i]==' '&&a[i-1]!=' ')
             {
                 printf("%d,",s);
                 s=0;
             }
         }
         cout<<s;
         return 0;
     }
    

    1.7.29 (ISBN)号码

    忘了(k==10)的特判‘(X)

    //1.7.29
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    char a[15];
    int b[15];
    int k;
    int main( ){
       scanf("%s",a+1);
       int j=1;
       for(int i=1;i<=11;i++){
       	if(i==2||i==6) continue;
       	else {
       		k+=(a[i]-'0')*j;
       		j++;
       	}
       }
       //printf("%d
    ",k);
       k%=11;
       if(k==10) k='X'-'0';
       if(k==a[13]-'0') printf("Right");
       else{
       	a[13]=k+'0';
       	printf("%s",a+1);
       }
       return 0;
    }
    

    重点!!!

    k%=11;
    	if(k==10) k='X'-'0';//关于字符之间的运算
    	if(k==a[13]-'0') printf("Right");
    	else{
    		a[13]=k+'0';
    		printf("%s",a+1);
    	}
    

    1.7.32 行程缩写

    在程序内开数组,要memset要不然输出的数很怪

    //1.7.32
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int main( ){
    	char s[1006];
    	scanf("%s",s+1);
    	int a[1010];
    	memset(a,0,sizeof(a));//!!
    	int len1;
    	len1=strlen(s+1);
    	for(int i=1;i<=len1;i++){
    		if(s[i]>='a'&&s[i]<='z') s[i]=s[i]-'a'+'A';
    	}
    	//printf("%s",s+1);
    	for(int i=1;i<=len1;i++){
    		if(s[i]==s[i+1]) a[s[i]-'A']++;
    		else {
    			printf("(%c,%d)",s[i],a[s[i]-'A']+1);
    			a[s[i]-'A']=0;
    		}
    	}
    	return 0;
    }
    

    1.7.35 字符串的展开

    //1.7.35
    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<string>
    using namespace std;
    bool iszimu(char a){
            if(a>='a'&&a<='z') return true;
            return 0;
        }
    void solve(string &s,int p1,int p2,int p3){
        if(p1==1)
        {
            for(int i=0;i<s.length();i++)
            {
                if(s[i]=='-')
                {
                    if(iszimu(s[i-1])&&iszimu(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                        if(p3==1)
                        {
                            for(char temp = s[i-1]+1;temp<s[i+1];temp++)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        else
                        {
                            for(char temp = s[i+1]-1;temp>=s[i-1]+1;temp--)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        continue;
                    }
                    else if(isdigit(s[i-1])&&isdigit(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                        if(p3==1)
                        {
                            for(char temp = s[i-1]+1;temp<s[i+1];temp++)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        else
                        {
                            for(char temp = s[i+1]-1;temp>=s[i-1]+1;temp--)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        continue;
                    }
                    else if(s[i-1]>=s[i+1] ) cout<<'-';
                    else if(s[i-1]+1==s[i+1]);
                    else cout<<'-';//刚开始没有这个,如果s-2这种就会出错(少一个-)
                }
                else
                    cout<<s[i];
            }
            cout<<endl;
        }
        else if(p1==2)
        {
            for(int i=0;i<s.length();i++)
            {
                if(s[i]=='-')
                {
                    if(iszimu(s[i-1])&&iszimu(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                       if(p3==1)
                       {
                            for(char temp = s[i-1]+1-('a'-'A');temp<s[i+1]-('a'-'A');temp++)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                       }
                       else
                       {
                            for(char temp = s[i+1]-1-('a'-'A');temp>=s[i-1]+1-('a'-'A');temp--)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                       }
                        continue;
                    }
                    else if(isdigit(s[i-1])&&isdigit(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                        if(p3==1)
                        {
                            for(char temp = s[i-1]+1;temp<s[i+1];temp++)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        else
                        {
                            for(char temp = s[i+1]-1;temp>=s[i-1]+1;temp--)
                            {
                                for(int j=0;j<p2;j++) cout<<temp;
                            }
                        }
                        continue;
                    }
                    else if(s[i-1]>=s[i+1] ) cout<<'-';
                    else if(s[i-1]+1==s[i+1]);
                    else cout<<'-';
                }
                else
                    cout<<s[i];
            }
            printf("
    ");
        }
        else
        {
            for(int i=0;i<s.length();i++)
            {
                if(s[i]=='-')
                {
                    if(iszimu(s[i-1])&&iszimu(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                        for(char temp = s[i-1]+1;temp<s[i+1];temp++)
                        {
                            for(int j=0;j<p2;j++) cout<<'*';
                        }
                        continue;
                    }
                    else if(isdigit(s[i-1])&&isdigit(s[i+1])&&s[i+1]>s[i-1]+1)
                    {
                        for(char temp = s[i-1]+1;temp<s[i+1];temp++)
                        {
                            for(int j=0;j<p2;j++) cout<<'*';
                        }
                        continue;
                    }
                    else if(s[i-1]>=s[i+1] ) cout<<'-';
                    else if(s[i-1]+1==s[i+1]);
                    else cout<<'-';
                }
                else
                    cout<<s[i];
            }
            cout<<endl;
        }
    }
    int main(){
           int p1,p2,p3;
           string s;
           while(cin>>p1>>p2>>p3)
           {
               cin>>s;
               solve(s,p1,p2,p3);
           }
            return 0;
        }
    

    最小公倍数·最大公因数

    辗转相除法

    重要定理:如果(a,b)的最大公因数和最小公倍数是(m,n),那么(ab=mn)

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int gcd(int x,int y){
      int r=x%y;
      while(r!=0){
      	x=y;
      	y=r;
      	r=x%y;
      }
      return y;
    }
    int lcm(int x,int y){
      return x*y/gcd(x,y);
    }
    int main( ){
      int a,b;
      printf("Please input two numbers a and b");
      scanf("%d%d",&a,&b);
      printf("a=%d,b=%d
    ",a,b); 
      printf("gcd(%d,%d)=%d,lcm(%d,%d)=%d",a,b,gcd(a,b),a,b,lcm(a,b)); 
    } 
    

    ↑辗转相除法求最大公因数和最小公倍数

    以1.7.30字符环为例

    //1.7.30 字符环
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    int gcd(int x,int y){
    	int r=x%y;
    	while(r!=0){
    		x=y;
    		y=r;
    		r=x%y;
    	}
    	return y;
    }
    int lcm(int x,int y){
    	return x*y/gcd(x,y);
    }
    int main( ){
    	char s1[260],s2[260];
    	scanf("%s%s",s1+1,s2+1);
    	int len1,len2;
    	len1=strlen(s1);len2=strlen(s2);
    	
    	if(len2>len1){
    		swap(len1,len2);
    		swap(s1,s2);
    	}
    	int lengcd;
    	lengcd=gcd(len1,len2);
    	for(int i=1;i<=len1;i++){
    		for(int j=1;j<=len1+len2,j++){
    			int k=j%len2;
    			while(s1[k])
    		}
    	}
    }
    

    统计单词个数

    #include <cstdio>
    #include <cstring>
    using namespace std;
    char s[105];
    int nw=1,count=0;
    //way1
    int main( ){
    	gets(s+1);
    	s[0]=' ';
    	int le=strlen(s+1);
    	//printf("%d 
    ",le);
    	for(int i=0;i<=le;i++){
    		if(s[i]==' '){
    			nw=1;
    		}
    		else{
    			if(nw==1){
    				nw=0;
    				count++;
    			}
    		}
    	//	printf("%d %d %c
    ",i,count,s[i]);
    	}
    	printf("%d",count);
    	return 0;
    }
    void way2( ){
    	gets(s);
    	for(int i=0;i<=101;i++){
    		if(s[i]==''){
    			break;
    		}
    		if(s[i]==' '){
    			nw=1;
    		}
    		else{
    			if(nw==1){
    				nw=0;
    				count++;
    			}
    		}
    		//printf("%d %d %c
    ",i,count,s[i]);
    	}
    	printf("%d",count);
    	return ;
    }
    #include <cstdio>
    #include <cstring>
    #include <stack>
    
    using namespace std;
    char sm[105];
    char str[105];
    int cnt=0;
    void way3(){
    	 stack < int > sp;
    	gets(sm);
    	int le=strlen(sm);
    	sp.push(0);//事先压入空格 
    	for(int i=0;i<le;i++){
    		if(sm[i]!=' ') sp.push(sm[i]-'0');
    		else sp.push(0);//处理字符串 
    	}
    	while(sp.size()!=0){
    		char tmp;
    		tmp=sp.top();
    		if(tmp==0) cnt++;
    		sp.pop();//统计 
    	}
    	printf("%d",cnt);
    	return ;
    }
    
    要做就做南波万
  • 相关阅读:
    pycharm在401跑程序需要每个py文件加一句
    youtube下载视频方法
    服务器重启登陆界面死循环
    matlab2012b_win_install
    ubuntu_matlab2012b_install
    cuda8.0 + cudnn6 + tensorflow1.4 xing
    [BAT] cmd 管理员权限 右键菜单 运行
    Windows下遍历所有GIT目录更新项目脚本
    获取Xshell Xftp等官网下载地址
    Win10 企业版 激活 批处理
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/11991548.html
Copyright © 2011-2022 走看看