分享两道群硕的笔试编程题——Augmentum笔试归来

      分享两道群硕的笔试编程题,群硕的笔试题目难度还可以,主要考了一些数据结构和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);
 
}

你可能感兴趣的:(数据结构,编程,c,算法,存储)