Huawei 2015 机试题

来源:互联网 发布:php过滤标签中的style 编辑:程序博客网 时间:2024/05/21 18:42

(1)分解字符串

输入两个数M,N,其中M表示输入字符串的个数,N表示输出字符串的位数

例如:input: 2 8

output: abc00000 

             12345678 90000000

#include <stdio.h>
#include <string.h>
void solve(char *str, int n, int len){
int i,j,k,quotient,remainder;
quotient = len / n;
remainder = len - n * quotient;
for(i=0;i<len;i+=n){
if(len - i < n){
k = n - len + i;
for(j=i;j<len;j++)
printf("%c",str[j]);
for(j=0;j<k;j++)
putchar('0');
}
else{
for(j=i;j<i+n;j++)
printf("%c",str[j]);
}
putchar(' ');
}
printf("\n");
}
int main(){
int i,m,n,len;
char str[1000];
while(scanf("%d %d",&m,&n) != EOF){
for(i=0;i<m;++i){
scanf("%s",str);
len = strlen(str);
solve(str,n,len);
}
}


return 0;
}

(2)拼音转数字,对应关系如下所示

yi er san si wu liu qi ba jiu

1 2     3    4  5     6   7  8    9

input: yiersansi

output:1234

#include <stdio.h>
#include <string.h>
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(){
int len;
char str[1000];
while(scanf("%s",str) != EOF){
len = strlen(str);
solve(str,len);
}
return 0;
}

(3)去除字符串中的重复字符,并且实现排序输出

input: aabcdefff

output: abcdef

#include <stdio.h>
#include <string.h>
#include <memory.h>
void solve(char *str, int len){
int i,hash[256];
memset(hash,0,sizeof(hash));
for(i=0;i<len;i++){
if(hash[str[i]] == 0)
hash[str[i]] = 1;
}
for(i=0;i<256;i++){
if(hash[i] != 0)
putchar(i);
}
printf("\n");
}
int main(){
int len;
char str[1000];
while(scanf("%s",str) != EOF){
len = strlen(str);
solve(str,len);
}
return 0;
}

(4)在1 2 3 4 5 6 7 8 9 = x,之间添加+或者-,使得等式的结果等于x,并输出满足的等式的个数

input: 5

output : .......................等式

              21

#include<stdio.h>
int ops[21];
const char sym[3] = {'+','-',' '};
int result, num;
void dfs(int layer, int currentresult, int lastop, int lastsum){
lastsum *= (layer>9) ? 100 : 10;
lastsum += layer;
if(layer == 9){
currentresult += (lastop) ? (-1 * lastsum) : lastsum;
if(currentresult == result){
++num;
printf("1");
int i;
for(i=2;i<=9;i++){
if(sym[ops[i-1]] != ' ')
printf(" %c ",sym[ops[i-1]]);
printf("%d",i);
}
printf(" = %d\n",result);
}
return;
}
ops[layer] = 2;
dfs(layer+1,currentresult,lastop,lastsum);
currentresult += (lastop)?(-1*lastsum) : lastsum;
ops[layer] = 0;
dfs(layer+1,currentresult,0,0);
ops[layer] = 1;
dfs(layer+1,currentresult,1,0);
}
int main(){
while(scanf("%d",&result) != EOF){
num = 0;
dfs(1,0,0,0);
printf("%d\n",num);
}
return 0;
}

(5)如果输入字符串,首字符为大写字母,其他字符为非大写字符,返回true

如果为空字符串,首字符非字母,首字母为小写,首字母为大写其他字符非字母等,返回false

input: Hello world

output: true



#include <stdio.h>
#include <string.h>
int main(){
char str[129];
int len,i;
bool flag = false;
while(gets(str) != NULL){
len = strlen(str);
if(str[0]>='A' && str[0] <= 'Z'){
for(i=1;i<len;i++){
if(str[i]>='A' && str[i] <= 'Z')
break;
}
if(i==len)
flag = true;
else
flag = false;
}
if(flag)
puts("true");
else
puts("false\n");
}
return 0;
}


0 0
原创粉丝点击