标签:
题目:将整数 数列中重复的数字修改为“该数字的值*该数字在此序列中是第几次出现,序列中元素值最大为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【】位里再不用修改了,这个小细节导致没拿全分,很可惜。
标签:
原文地址:http://www.cnblogs.com/Snail-feng/p/4374761.html