如何求得3个一组的五组数字中相同数字的个数?
来源:互联网 发布:双重照片软件 编辑:程序博客网 时间:2024/06/05 05:06
整理自csdn上的一个帖子。
有5组数字,分别是3位一组,例如578,129,569,175,518这5组数字,要得到如下结果:
1、合并百位重复的数1和5,得到结果5和1,并告知重复数字是2个。若全是百位1的话,则得到结果1,并告知重复数字是1个。
2、全部数字排列后得到578129569175518,合并所有重复的数字得到结果5781296,并告知最后数字是7个。
思路:1、开长度为 10 的整形数组,解析所有百位的数字(如 6、2、2 等),将相应下标的数组值加1,最后统计数组中值 > 1 的个数;
2、将数组中数字连接成字符串保存到一个字符数组中,从最后一个元素开始依次和前面的所有元素比较,如果相等就把该元素以后的所有元素往前依次挪一位,以此实现删除重复元素,最后统计字符数组的长度就是数字个数。
程序:
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
int GetNum1(int a[])
{
int arr[10]={0};
int i,tmp,j=0;
for (i=0;i<5;i++)
{
tmp = a[i]/100;//用百位数做新数组的下标
arr[tmp] += 1;
}
for (i=1;i<=9;i++)
{
if (arr[i]>1)
{
cout<<"重复的百位数"<<i<<":"<<"重复次数"<<arr[i]<<endl;
j++;
}
}
return j;
}
int GetNum2(char *str)
{
int n=strlen(str);
int i,j,k;
for(i=n-1; i>0; i--)
{
j=0;
while(j<i)
{
if(str[j]==str[i])
break;
j++;
}
if(j<i)
{
k=i;
while(str[k]!='/0')//去除重复数字,将后面的值依次往前挪一位
{
str[k]=str[k+1];
k++;
}
}
}
return n=strlen(str);
}
void main()
{
int a[5] = {578,129,569,175,518};
char tmp[4];
char str[15]="";
int i;
cout<<"重复百位数个数为:"<<GetNum1(a)<<endl;
cout<<endl<<"全部数字连接后得到:"<<endl;
for (i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
itoa(a[i],tmp,10);
strcat(str,tmp);
}
cout<<str<<endl;
cout<<endl<<"出现的数字个数:"<<GetNum2(str)<<endl;
cout<<"除去重复数字后的序列为:"<<str<<endl;
}
总结:第二问的初解方法:将数组中数字连接成字符串保存到一个字符数组中,从第一个元素开始依次和后面的元素比较,遇到相等的就把其替换为字符‘#’,最后统计数组中非‘#’字符的个数即为数字个数。
程序:
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
int Replace(char str[])
{
int i,j,count=0;;
int n=strlen(str);
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if (str[i]==str[j])
{
str[j]='#';
continue;
}
}
}
for (i=0;i<n;i++)
{
if (str[i]!='#')
{
count++;
}
}
return count;
}
void main()
{
int a[5] = {578,129,569,175,518};
char tmp[4];
char str[15]="";
int i;
cout<<endl<<"全部数字连接后得到:"<<endl;
for (i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
itoa(a[i],tmp,10);
strcat(str,tmp);
}
cout<<str<<endl;
cout<<endl<<"出现的数字个数为:"<<Replace(str)<<endl;
cout<<endl<<"将重复数字替换后的序列为:"<<endl;
cout<<str<<endl;
cout<<endl<<"除去重复数字后的序列为:"<<endl;
for (i=0;i<sizeof(str);i++)
{
if (str[i]!='#')
{
cout<<str[i];
}
}
}
以上函数中用到了continue和break,在此做一复习:
break是跳出最近的那层循环,跳出循环后接着执行循环体下面的语句;在GetNum2函数中,当有元素相等时执行break语句跳出while循环,紧接着就执行下面的if语句。
continue是跳出本次循环,跳出循环后又回到循环体头部接着执行后面的循环;在Replace函数中,当i=0,j=6时元素相等,将重复元素替换后执行continue语句跳出循环(如果continue下面有语句不会被执行到),跳出循环后重新回到for循环体头部,接着执行后面的循环,此时i依然等于0,而j加1变成了7,直到j不满足循环条件而结束本次那循环;以此可实现通过一次外层循环就把所有与相比较元素相等的元素都找出来。
- 如何求得3个一组的五组数字中相同数字的个数?
- 统计相同数字的个数
- 求得1-1000所有出现1的数字,并计算出现1的个数
- 删除一组数中重复的数字
- php查出连续一组数字中缺少的那个数字
- 查找两个字符(或数字)数组中第一个相同的字符(或数字)
- 输出由1~9组成和三组三位数,第二组是第一组的2倍,第三组是第一组的3倍,三组数字中无重复数字
- 输入一组数字,要求按回车则停止输入,并且统计出输入数字的个数
- 输入一组数字,统计每个数字的个数后按序输出
- 统计个位数字相同的数的个数
- 12:与指定数字相同的数的个数
- 01:与指定数字相同的数的个数
- 1.与指定数字相同的数的个数
- 与指定数字相同的数的个数
- 输出一个整数序列中与指定数字相同的数的个数
- 如何统计一串数字中,出现重复数的个数?
- 一组数字的循环输出
- EularProject 47:具有相同个数因子的连续数字
- java操作word文档
- CSDN
- 使用do..while 替换 goto
- sharePoint资料
- 俺写的第一个javame程序,纪念一下
- 如何求得3个一组的五组数字中相同数字的个数?
- 新刊书店 >> 书库 >> .NET分布式编程——C#篇列表
- How to use UIDs
- 40个网页设计小技巧
- 20071010听力原文
- CTime 使用总结
- 在repeater、datalist控件中使用分页功能
- jsp调用SQL server 2000存储过程-初学
- 显示输入字符的ASCII码