码迷,mamicode.com
首页 > 其他好文 > 详细

2015-3-28华为机试总结

时间:2015-03-28 21:41:44      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

题目:将整数 数列中重复的数字修改为“该数字的值*该数字在此序列中是第几次出现,序列中元素值最大为1000,数列中最大个数为100

输入:1,6,3,5,4,6,3,4,4,4

输出:1,6,3,5,4,12,6,8,12,16

正确程序如下:

#include<iostream>
using namespace std;
int main()
{
    int i;
 int j=0;
 int zhen[100]={0};
 char a[100];
 cin.get (a,100);
 for(i=0;a[i]!=‘\0‘&&a[i]!=‘\n‘;i++)        //获取输入字符串中的数字
 {
  if(a[i]>=48)
  {
   zhen[j]=a[i]-48;
   j++;
  }
 }
 int len=0;
  for(int l=0;l<100;l++)                //获取输入的个数
  {
   if(zhen[l]!=0)
    len++;
  }
 int arr[100]={0};
 int count=1;
 for(int m=0;m<len;m++)                   //循环操作,将对应位是第几个的数值存在另外数组arr【】中
 {
  for(int p=m+1;p<len;p++)
  {
   if(zhen[m]==zhen[p])
   {
    count++;
    if(arr[p]==0)
     {arr[p]=count;}
   } 
  }
  count=1;
 }
 for(int a=0;a<len-1;a++)                //去掉最后一个逗号输出
 {
  if(arr[a]==0)
   cout<<zhen[a]<<",";
  else
   cout<<zhen[a]*arr[a]<<",";
 }
 if(arr[len-1]==0)
  cout<<zhen[len-1];
 else
  cout<<arr[len-1]*zhen[len-1];
 system ("pause");
 return 0;
}

出现的问题有:

(1)直接在原来数组zhen[]中去修改数字,比如第2个4就把它修改为8,这样导致再次循环时,如果前面有8,会又将这个改为16,从而出错;

所以,解决这种第几个问题的时候,需要重新开辟一个数组,然后再乘以两个数组相应位就可以求得;

(2)if(arr[p]==0)这一句很重要,如果没有这一句的话:比如输入4,4,4,4,那么对应arr[]数组就是1,2,1,1,这样肯定出错。所以先将arr[]数组初始化为0,在修改过的arr【】位里再不用修改了,这个小细节导致没拿全分,很可惜。

2015-3-28华为机试总结

标签:

原文地址:http://www.cnblogs.com/Snail-feng/p/4374761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!