ファーウェイ試験問題(5)

5361 ワード

第1題整数化文字列
負の数の可能性のある整数を指定し、整数を文字列にします.関数はvoid change(int number,char s[])のような形式で宣言されています.自分で用例テストを書くことができます.
[cpp] view plain copy print ?
#include    
  • #include    

  •   
  • void change(int number, char s[])  

  • {  
  •     int m;  

  •     int i;  
  •     char tmp[50];  

  •     if(number>0)  
  •     {  

  •         m=0;  
  •         while(number>0)  

  •         {  
  •             tmp[m]=number%10+'0';  

  •             number=number/10;  
  •             m++;  

  •         }  
  •         tmp[m]='\0';  

  •         for(i=0;i
  •         {  

  •             s[m-1-i]=tmp[i];  
  •         }  

  •         s[m]='\0';  
  •     }  

  •     else if(number<0)  
  •     {  

  •         number=-number;  
  •         m=0;  

  •         while(number>0)  
  •         {  

  •             tmp[m]=number%10+'0';  
  •             number=number/10;  

  •             m++;  
  •         }  

  •         tmp[m]='\0';  
  •         for(i=0;i
            {  
  •             s[m-i]=tmp[i];  

  •         }  
  •         s[0]='-';  

  •         s[m+1]='\0';  
  •     }  

  •     else  
  •     {  

  •         s[0]='0';  
  •         s[1]='\0';  

  •     }  
  •   

  • }  
  • int main(/*int argc, char **argv*/)  

  • {  
  •     int number=-7782347;  

  •     char s[50]={0};  
  •     change(number,s);  

  •     printf("%s ",s);  
  •   

  •     system("pause");  
  •     return 0;  

  • }  
    #include <stdio.h>
    #include <string.h>
    
    void change(int number, char s[])
    {
    	int m;
    	int i;
    	char tmp[50];
    	if(number>0)
    	{
    		m=0;
    		while(number>0)
    		{
    			tmp[m]=number%10+'0';
    			number=number/10;
    			m++;
    		}
    		tmp[m]='\0';
    		for(i=0;i<m;i++)
    		{
    			s[m-1-i]=tmp[i];
    		}
    		s[m]='\0';
    	}
    	else if(number<0)
    	{
    		number=-number;
    		m=0;
    		while(number>0)
    		{
    			tmp[m]=number%10+'0';
    			number=number/10;
    			m++;
    		}
    		tmp[m]='\0';
    		for(i=0;i<m;i++)
    		{
    			s[m-i]=tmp[i];
    		}
    		s[0]='-';
    		s[m+1]='\0';
    	}
    	else
    	{
    		s[0]='0';
    		s[1]='\0';
    	}
    
    }
    int main(/*int argc, char **argv*/)
    {
    	int number=-7782347;
    	char s[50]={0};
    	change(number,s);
    	printf("%s
    ",s); system("pause"); return 0; }

    文字列を指定し、その最大のサブストリングを探します.このサブストリングは回文です.例えば、所与の使用例文字列「gabcdcbaef」の場合、最大文字列は「abcdcba」である.関数はvoid huiwen(char input[],int len,char output[])として宣言されます.
    [cpp] view plain copy print ?
    #include    
  • #include    

  • #include    
  •   

  • void max_sub_huiwen(char input[], char output[])  
  • {  

  •     int flag = 1;  
  •     char *p=input,*q=input;  

  •     char *p_end;  
  •     char *begin,*end;//判断文字列は
  • に用いられる.
        while(*q)  
  •         q++;  

  •     q--;//qは末尾の最後の文字を指す
  •     p_end = q;  

  •     //printf("last =%c",*q);   
  •     while(p
        {  
  •         while(1)  

  •         {  
  •             while((*p != *q) && (p
                    q--;  
  •             if(p == q)  

  •                 break;  
  • if(pかどうかを判断する
                {  
  •                 begin = p;  

  •                 end = q;  
  •                 while(begin
                        if(*begin++ != *end--)  
  •                     {  

  •                         flag = 0;  
  •                         break;  

  •                     }  
  •                 if(flag == 1)  

  •                 {  
  •                     while(p <= q)  

  •                         *output++ = *p++;  
  •                     *output='\0';  

  •                     return;  
  •                 }  

  •                   
  •             }  

  •             q--;  
  •         }  

  •         p++;  
  •         q = p_end;  

  •     }  
  •   

  • }  
  • int main(/*int argc, char **argv*/)  

  • {  
  •     char input[50]="gabcdcbaef";  

  •     char output[50]={0};  
  •     printf("%s ",input);  

  •     max_sub_huiwen(input,output);  
  •     printf("%s ",output);  

  •     system("pause");  
  •     return 0;  

  • }