2014年华为上机题一

来源:互联网 发布:外国电视台直播软件 编辑:程序博客网 时间:2024/04/20 09:00

此题是2013年9月14日本人参加上机考试的题目

1、第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50

以下答案是本人写的,已经在vs2008上测试通过,如果有更简便的方法还请提出来。

()先贴一个错误的做法:

#include<iostream>
using namespace std;
int main()
{
 int n;
 cout<<"请输入数组的长度:"<<endl;
 cin>>n;
 int *p=new int[n];
 for(int i=0;i<n;i++){
  cin>>p[i];
  //cin>>
 }
 int max_num=p[0],min_num=p[0];
 cout<<"数组的输出: "<<endl;
 for(int i=0;i<n;i++){
  //cout<<p[i]<<endl;
  if(max_num<=p[i]){
   max_num=p[i];
  }
  if(min_num>=p[i]){
   min_num=p[i];
  }
  if(i==n-1){
   cout<<max_num+min_num<<endl;
  }
 }
 delete[]p;
 return 0;
}

(2)比较正确的做法

#include<iostream>
#include<string>
using namespace std;

int main(){
 string s;
 int temp=0;  //将字符转换成数字
 int num[50]={0};
 int i=0;
 char *p;
 cin>>s;  //输入字符串
 //p=s;
    cout<<s<<endl;
 for(string::size_type ix=0;ix!=s.size();++ix){
  if(s[ix]!=','){
   temp=temp*10+s[ix]-'0';
  }
  else{
   num[i]=temp;
   temp=0;
   cout<<num[i]<<endl;
   i++;
  }
  
  
 }
 //最后一个没有逗号的数字 
 num[i]=temp;
  cout<<num[i]<<endl;

//计算数组中的最大,最小数之和
  int min_num=num[0];
  int max_num=num[0];
  for(int j=0;j<=i;j++){
            if(num[j]>=max_num)
    max_num=num[j];
   if(num[j]<=min_num)
    min_num=num[j];

  }
  cout<<min_num+max_num;

   return 0;
 }

需要指出的是,输入的控制,这里面第一眼大家都会想到用数组,但是数组的长度是不知道的,无法控制输入,所以很容易陷进去,而用字符串则直接回车后便退出控制台。

2 求两个长长整型的数据的和并输出,例如输入1233333333333333 。。。 3111111111111111111111111.。。。,则输出。。。。

此题同样是采用字符串类似的方法,本文此处用的是char 型指针,用纯C做的,代码不够简洁,还请大家多批评指正。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{
  char *p;  //输入数字字符串1
  char *q;  //输入数字字符串2
  char *sum; //求和的字符串
  int p_len; //数字字符串1的长度
  int q_len; //数字字符串2的长度
  //int len;
  int len;
  int len_temp; //两个字串的最大长度
  int xunhuan;  //相加循环的次数
  int index=0;   //求和之后的进位
  int d;   //求和
  int bit;
  int i;
  int p_bit;    //p的每位
  int q_bit;   //q的每位
  //char *temp;
  p=(char*)malloc(sizeof(char));
  q=(char*)malloc(sizeof(char));
  sum=(char*)malloc(sizeof(char));
  sum[0]='0';   //初始化进位
  scanf("%s",p);
  scanf("%s",q);
  p_len=strlen(p);
  q_len=strlen(q);
  if(p_len==q_len){
     len=p_len;
  for(i=len;i>0;i--){
   p_bit=p[i-1]-'0';
   q_bit=q[i-1]-'0';
   d=(q_bit+p_bit+index)%10;
   index=(q_bit+p_bit+index)/10;
   sum[i]=d+'0';
  }
  if(index!=0){
   sum[0]=index+'0';
  }
  sum[len+1]='\0';
   if(sum[0]=='0')
    printf("%s",sum+1);
   else
    printf("%s",sum);

  }
  if(p_len!=q_len)
  {
   len_temp=(p_len>q_len)?p_len:q_len;
  xunhuan=(p_len>q_len)?q_len:p_len;
  if(len_temp==p_len){
   strcpy(sum+1,p);
  }
  else{
   strcpy(sum+1,q);
  }
   len=len_temp+1;
   for(i=xunhuan;i>=1;i--){
    if(p_len>q_len){
    p_bit=p[len_temp-1]-'0';
    q_bit=q[i-1]-'0';
    }
    else{
     p_bit=p[i-1]-'0';
     q_bit=q[len_temp-1]-'0';
    }
    d=(q_bit+p_bit+index)%10;
    index=(q_bit+p_bit+index)/10;
    sum[len_temp--]=d+'0';
   }
   while(index==1){
    bit=sum[len_temp]-'0';
    d=(bit+index)%10;
    index=(bit+index)/10;
   // sum[len_temp]=(((sum[len_temp]-'0')+index)/10)+'0';
   // index=(index+(sum[len_temp]-'0'))%10;
   sum[len_temp]=d+'0';
    len_temp--;
   }
   sum[len]='\0';
     if(sum[0]=='0')
   printf("%s",sum+1);
  else
   printf("%s",sum);
  
  }
}