分享两道群硕的笔试编程题——Augmentum笔试归来
2010-10-20 15:41
351 查看
分享两道群硕的笔试编程题,群硕的笔试题目难度还可以,主要考了一些数据结构和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);
}
题目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);
}
相关文章推荐
- 分享一道笔试编程题
- [面经]CVTE的两道笔试编程题
- 两道笔试编程题(求水仙数和求平方根数组之和)
- [面经]CVTE的两道笔试编程题
- 今天参加北京华为笔试的两道编程题(第一次在csdn写东西)
- 百度的两道笔试编程题
- 分享两道笔试题
- 当当网笔试的两道编程题
- 分享一道Kingsoft的笔试题——Kingsoft笔试归来(应聘职位:服务器端开发工程师)
- 阿里秋招在线笔试两道编程题
- 2017滴滴实习招聘笔试两道编程题
- 2016腾讯实习生在线笔试的两道编程题
- 分享两道笔试题目
- 分享java编程题(二)(网易笔试)
- 两种排序方法(字典序,strcmp的用法)----网易2017内推笔试编程题合集(二)
- 腾讯2017秋招笔试编程题:geohash [python]
- 硅谷归来7点分享:创业者,做你自己
- 分享2017年微软编笔试程题
- 找工作——计算机笔试编程题(不定期更新)
- 网易笔试归来