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 ;
    }
    
    要做就做南波万
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/11991548.html
Copyright © 2011-2022 走看看