第一题(60分):
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
#include<iostream> using namespace std; void solve(char *str , int n , int len) { int q=len/(n+1);//原字符串被分解的个数 int i;int j; for(i=0;i<=q;i++) { if(len<=n) { for(j=0;j<len;j++) cout<<str[j]; for(;j<n;j++) cout<<"0"; } else { for(j=0;j<n;j++) cout<<str[j]; cout<<" "; len=len-n; } } } int main(void) { int i , m , n , len; char str[1000]; cin>>m>>n; for(i = 0 ; i < m ; ++i) { scanf("%s" , str); len = strlen(str); solve(str , n , len); cout<<endl; } return 0; } <span style="font-size:18px;color: rgb(51, 51, 51); font-family: Verdana; line-height: 26px;"> </span>
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
#include<iostream> using namespace std; void solve(char *str , int len) { int i; for(i = 0 ; i < len ; ) { switch(str[i]) { case 'y': putchar('1'); i += 2; break; case 'e': putchar('2'); i += 2; break; case 's': if(str[i + 1] == 'a') { putchar('3'); i += 3; } else { putchar('4'); i += 2; } break; case 'w': putchar('5'); i += 2; break; case 'l': putchar('6'); i += 3; break; case 'q': putchar('7'); i += 2; break; case 'b': putchar('8'); i += 2; break; case 'j': putchar('9'); i += 3; break; } } printf("\n"); } int main(void) { int len; char str[1000]; while(scanf("%s" , str) != EOF) { len = strlen(str); solve(str , len); } return 0; }
去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
- #include<iostream>
- using namespace std;
- void solve(char *str , int len)
- {
- int i , hash[256];
- memset(hash , 0 , sizeof(hash));
- for(i = 0 ; i < len ; ++i)
- {
- if(0 == hash[str[i]])
- hash[str[i]] = 1;
- }
- for(i = 0 ; i < 256 ; ++i)
- {
- if(0 != hash[i])
- putchar(i);
- }
- printf("\n");
- }
- int main(void)
- {
- int len;
- char str[1000];
- while(scanf("%s" , str) != EOF)
- {
- len = strlen(str);
- solve(str , len);
- }
- return 0;
- }
华为模拟题:
输入一个数,如75345323,递减数有753,53,3,532,32等,其中最大的为753,
同时753的各位数相加(7+5+3=15)也是最大的,因此输出753+753=1506
例如
输入 75345323
输出 1506
分析:为防溢出,要用字符串来保存
#include<iostream> using namespace std; int Msum(char *b) { int sum=0; int n=strlen(b); for(int i=0;i<n;i++) { sum=sum+b[i]-'0'; } return sum; } int Tsum(char *str) { int len=strlen(str); if(len==0) return 0; if(len==1) return 2*(str[0]-'0'); int count =1; int begin=0; char *b=new char[len+1]; int sum; int Max; int maxNo; int maxsum=0; memset(b,'\0',len+1); int i; int j=0; int *c=new int[len+1]; memset(c,0,len+1); for(i=1;i<len;i++) { if((int)str[i]<(int)str[i-1]) { count=count+1; } else { begin=i-count; memcpy(b,str+begin,count); b[count]='\0'; c[j]=atoi(b); sum=Msum(b); if(sum>maxsum) { maxsum=sum; Max=c[j]; } j++; memset(b,'\0',len+1); i=j-1; count=1; } if(i==len-1) { begin=i-count+1; memcpy(b,str+begin,count); b[count]='\0'; c[j]=atoi(b); sum=Msum(b); if(sum>maxsum) { maxsum=sum; Max=c[j]; } j++; memset(b,'\0',len+1); i=j-1; count=1; } } maxNo=c[0]; for(i=0;i<j;i++) { if(c[i]>maxNo) { maxNo=c[i]; } } delete []b; delete []c; int SUM=Max+maxNo; return SUM; } int main() { char str[100]; cin>>str; int sum=Tsum(str); cout<<sum<<endl; return 0; }
时间: 2024-11-13 01:48:42