第一题(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
*/

华为机试题 2015_华为