2016年华为认证考试题库
printf("0");
return 0;
}
23将 电话号码 one two 。。。nine zero
翻译成1 2 。。9 0
中间会有double
例如输入:OneTwoThree
输出:123
输入:OneTwoDoubleTwo
输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
有空格,非法字符,两个Double相连,Double位于最后一个单词都错误
#include
#include
#include
int main()
{
chara[11][11]={"zero","one","two","three","four","five","six","seven","eight","nine","double"};
char temp[11], c=' ';
int i,j,f,d=0;
while(c!='\n')
{
scanf("%s%c",&temp,&c);
f=0;
for(j=0;j<11;j++)
{
if(!strcmp(temp,a[j])&&j<10)
{
printf("%d",j);
f=1;
if(d==1)
{
printf("%d",j);
d=0;
}
}
elseif(!strcmp(temp,a[j])&&j==10)
{
d=1;
f=1;
}
}
if(f==0)
break;
}
if(d==1||f==0)
printf("error\n");
printf("\n");
return 0;
}
24.将整数倒序输出,剔除重复数据
输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。
#include
#include
#include
#include
int main()
{
char*input=(char*)malloc(sizeof(char));
scanf("%s",input);
inta[10]={0},i,flag=0,flag1=0;
int len=strlen(input);
if(input[0]=='-')
{
flag=1;
for(i=0;i
input[i]=input[i+1];
}
intlen1=strlen(input);
int n[50],temp;
int count=0;
for(i=0;i
{
temp=input[i]-'0';
if(a[temp]==0)
{
n[count++]=temp;
a[temp]=1;
}
}
n[count]='\0';
if(flag==1)
printf("-");
for(intii=count-1;ii>=0;ii--)
{
if(n[ii]!=0||flag1!=0)
{
printf("%d",n[ii]);
flag1=1;
}
}
printf("\n");
return 0;
}
25.编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。
输入:if((a==1)&&(b==1))
输出:RIGTH 3 3
输入:if((a==1))&&(b==1))
输出:WRONG 3 4
#include
#include
int main()
{
char s[800]={'\0'};
scanf("%s",&s);
// char s[]="if(())";
int len=strlen(s);
int i,left=0,right=0;
int a[50],k=0,flag=1;
for(i=0;i
{
if(s[i]=='(')
{
left++;
a[k]=1;
k++;
}
elseif(s[i]==')')
{
right++;
if(a[k-1]==1&&k>0)
{
a[k-1]=0;
k--;
}
else
flag=0;
}
if((i==2&&s[i]!='(')||(i==len-1&&s[i]!=')'))
flag=0;
}
if(a[0]==0&&flag!=0)
printf("RIGHT");
else
printf("WRONG");
printf("%d%d\n",left,right);
return 0;
}
约瑟夫问题
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序
比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数
第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数
第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数
最后一轮计数出列数字为4,计数过程完成。
输出数值出列顺序为:2,3,1,4。
要求实现函数:
void array_iterate(int len, int input_array[], int m, int output_array[])
【输入】 int len:输入数列的长度;
int intput_array[]:输入的初始数列
int m:初始计数值
【输出】 int output_array[]:输出的数值出列顺序
【返回】 无
示例:
输入:int input_array[] = {3,1,2,4},int len = 4, m=7
输出:output_array[] = {2,3,1,4}
解题思路:
每次出列一个数值,需要对m、input_array、output_array、输出位置outPos、起始位置startPos进行更新;
对于输出位置outPos的计算是关键!通过分析可知,outPos=(startPos+m-1)%num
代码实现:
view plaincopy to clipboardprint?
#include
voidprint_array(int len, int array[])
{
for(int i=0; i
printf("%d ", array[i]);
printf("\n");
}
//input_array:a[0]...a[len-1]
voidarray_iterate(int len, int input_array[], int m, int output_array[])
{
int startPos=0;
int outPos;
int nIter=len-1;
int num=len;
for(; nIter>=0; nIter--)
{
outPos=(m+startPos-1)%num;
m=input_array[outPos];
startPos=outPos;
printf("outPos is %d, new m is%d\n", outPos, m);
output_array[len-nIter-1]=input_array[outPos];
for(int i=outPos; i
input_array[i]=input_array[i+1];
num--;
print_array(num, input_array);
}
}
voidmain()
{
int input_array[]={3,1,2,4};
int output_array[4]={0};
array_iterate(4, input_array, 7,output_array);
print_array(4, output_array);
}
27.统计数字出现的次数,最大次数的统计出来
举例:
输入:323324423343
输出:3,6
#include
#include
#include
int main()
{
char*num="323324423343";
inta[10]={0};
intlen=strlen(num);
inti,j,temp,count=0,maxnum=0;
printf("%d\n",len);
for(i=0;i
{
temp=num[i]-'0';
a[temp]++;
}
inttemp1=a[0];
for(j=0;j<10;j++)
{
if(a[j]!=0)
{
count++;
temp1=(temp1>a[j])?temp1:a[j];
printf("%d%d\n",a[j],j);
}
}
printf("数字出现次数为:%d\n",count);
printf("最大次数为:%d\n",temp1);
return0;
}
28. .字符串首字母转换成大写
举例:
输入:this is a book
返回:This Is A Book
#include
#include
#include
int main()
{
charinput[]="this is a book";
charoutput[256]={'\0'};
int i,len;
len=strlen(input);
printf("变换前的字符串为:%s\n",input);
for(i=0;i
{
if(input[0]!='')
input[0]-=32;
if(input[i]=='')
input[i+1]-=32;
output[i]=input[i];
}
printf("变换后的字符串为:%s\n",output);
}
29. 子串分离
题目描述:
通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一
个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子
串存储。
如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,
要求实现函数:
voidDivideString(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
#include
#include
#include
#include
更多相关文章推荐阅读: