分享两道群硕的笔试编程题,群硕的笔试题目难度还可以,主要考了一些数据结构和C++方面的基础知识,基础扎实的同学绝对没问题的,考试时间是两个小时(hr姐姐很漂亮!),下面分享两道编程题,以下代码均在visual C++ 6.0上运行通过了。
题目1大致是这样的:将一个字符串中的各个位按递增排序的最大整数打印出来。
例如,输入字符串"abc123def2345gh6567",打印出"2345"。
输入字符串"hello345world567",输出"567"。
算法思想:首先,略去字符串前面的非数字字符,用temp1[]记录各个位递增的最大整数,temp2[]记录下一个递增整数,若temp2[]>temp1[],则将temp2[]中的整数字符串拷贝到temp1[]中,最后打印出temp1[]。注意:所求的最大整数的各个位必须是递增的。例如,"2345","568"......
#include <stdio.h>
#include <string.h>
void findBigAcsNum(char * str)
{
char * result;
/*除去非数字字符串*/
while(*str>'9'||*str<'1')
str++;
int i=0;
char temp1[100];//存储最大的升序整数
char temp2[100];
temp1[i++]=*str++;
while(*str<='9'&&*str>='0')
{
if(*str<*(str-1))
i=0;
temp1[i++]=*str++;
}
temp1[i]='/0';
i=0;
while(*str!='/0')
{
/*除去非数字字符串*/
while(*str>'9'||*str<'1')
{
if(*str=='/0')
break;
str++;
}
while(*str<='9'&&*str>='0')
{
if(*str<*(str-1))
i=0;
temp2[i++]=*str++;
}
temp2[i]='/0';
i=0;
/*比较temp1和temp2的大小*/
if(strlen(temp1)<strlen(temp2))
strcpy(temp1,temp2);
else if(strlen(temp1)==strlen(temp2))
{
if(strcmp(temp1,temp2)<0)
strcpy(temp1,temp2);
}
}
/*打印最大的升序数列*/
printf("%s/n",temp1);
}
void main()
{
findBigAcsNum("1234def123456");
}
题目2大致是这样的:将一个字符串中的'*'号全部移到最前边,而且不可以改变其他字符串的原始顺序。
例如,"abcd**def"-->"**abcdef", "hello*w*o*rld"-->"***helloworld"。
算法思想:从字符串的最后向前扫描,一旦发现'*'就将'*'移到字符串的第一个位置,然后将其后的字符依次向后移。
#include <stdio.h>
#include <string.h>
void func(char * str)
{
int len=strlen(str);
char * str_p=str+len-1;
int i;
int count=0;//记录星星的数量
/*统计星星的数量*/
for(i=0;i<len;i++)
if(str[i]=='*')
count++;
char * temp;
for(i=0;i<len-1;i++)
{
while(*str_p=='*'&&count>0)
{
temp=str_p;
while(temp!=str)
{
*temp=*(temp-1);
temp--;
}
count--;
*str='*';
}
str_p--;
}
}
void main()
{
char str[]="abc***def";
func(str);
printf("%s/n",str);
}