第一题(60分):
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,
N代表输出的每串字符串的位数,不够补0。
例如:输入2,8, “abc” ,“123456789”,
则输出为“abc00000”,“12345678“,”90000000”
/* 第一题(60分): 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串, N代表输出的每串字符串的位数,不够补0。 例如:输入2,8, “abc” ,“123456789”, 则输出为“abc00000”,“12345678“,”90000000” */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define N 100 char str[N][N]; int main() { int m,n,i,j,k,q,len,z; while(scanf("%d%d",&m,&n)!=EOF) { for(i=0;i<m;i++) scanf("%s",str[i]); for(i=0;i<m;i++) { len=strlen(str[i]); k=len/n; q=0; for(j=0;j<k;j++) { for(z=0;z<n;z++) printf("%c",str[i][q++]); printf("\n"); } if(len%n!=0) { for(j=0;q<len;q++,j++) printf("%c",str[i][q]); for(;j<n;j++) printf("0"); printf("\n"); } } } return 0; } /* 2 8 abc 123456789 */
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
/* 第一题:拼音转数字 输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下: 描述: 拼音 yi er san si wu liu qi ba jiu 阿拉伯数字 1 2 3 4 5 6 7 8 9 输入字符只包含小写字母,所有字符都可以正好匹配 运行时间限制:无限制 内存限制: 无限制 输入: 一行字符串,长度小于1000 输出: 一行字符(数字)串 样例输入: yiersansi 样例输出: 1234 */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define N 1000 char str[N]; int main() { int i,len; while(gets(str)) { len=strlen(str); for(i=0;i<len;) { switch(str[i]){ case 'y': printf("1"); i+=2; break; case 'e': printf("2"); i+=2; break; case 's': if(str[i+1]=='a') { printf("3"); i+=3; break; } else{ printf("4"); i+=2; break; } case 'w': printf("5"); i+=2; break; case 'l': printf("6"); i+=3; break; case 'q': printf("7"); i+=2; break; case 'b': printf("8"); i+=2; break; case 'j': printf("9"); i+=3; break; } } printf("\n"); } return 0; } /* yiersansiwuliuqibajiu sansansan sansisansi qibajiuersansi */
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
/* 第二题:去除重复字符并排序 运行时间限制:无限制 内容限制: 无限制 输入: 字符串 输出: 去除重复字符并排序的字符串 样例输入: aabcdefff 样例输出: abcdef */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define N 1000 char str[N]; int h[256]; int main() { int i,len; while(scanf("%s",str)!=EOF) { len=strlen(str); memset(h,0,sizeof(h)); for(i=0;i<len;i++) { if(h[str[i]]==0) h[str[i]]=1; } for(i=0;i<256;i++) { if(h[i]) printf("%c",i); } printf("\n"); } return 0; } /* aabcdefff aaaaa ddbbcc */
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21
/* 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数。 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define N 1000 int oper[10]; //0+,1-,2 ' ' int result,sum; //计算到第几个数,当前的和,上一个符号0符号,1正号,上一个值 void dfs(int level,int cur,int lastOper,int lastSum) { lastSum=lastSum*10+level; if(level==9) { cur+=lastOper?(-1*lastSum):lastSum; if(cur==result) { sum++; printf("1"); for(int i=2;i<=9;i++) { if(oper[i-1]!=2) printf("%c",oper[i-1]==0?'+':'-'); printf("%d",i); } printf("=%d\n",result); } return ; } //不插入符号 继续 oper[level]=2; dfs(level+1,cur,lastOper,lastSum); //符号计算值 cur+=lastOper?(-1*lastSum):lastSum; oper[level]=0; dfs(level+1,cur,0,0); oper[level]=1; dfs(level+1,cur,1,0); } int main() { int i,len; while(scanf("%d",&result)!=EOF) { sum=0; dfs(1,0,0,0); printf("%d\n",sum); } return 0; } /* 5 */