如何求得3个一组的五组数字中相同数字的个数?

原创 2007年10月10日 16:45:00

 整理自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不满足循环条件而结束本次那循环;以此可实现通过一次外层循环就把所有与相比较元素相等的元素都找出来。

版权声明:本文为博主原创文章,转载请注明出处。

随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数

//随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数 //随机给定10个小于10的数字(出现的数字可能重复...
  • feihongxueni
  • feihongxueni
  • 2015年09月09日 15:58
  • 1455

在一个数组中查找两个重复出现两次的数

题目如下:现有一个数组长度为n+1,里面存放有1到n-2,顺序不定,其中有两个数字出现了两次,现在要找出那两个数字。 例子A={2, 3, 1, 4, 5, 2, 4},这个数组长度为7,存放了1到...
  • codeera
  • codeera
  • 2015年10月02日 17:24
  • 4098

1-9九个数字不重复组成一个三位数加法算式,求出所有组合

此题咱没想出很巧妙的解法,直接根据编程来吧 using System; using System.Collections.Generic; using System.Text; namespa...
  • qiaoquan3
  • qiaoquan3
  • 2016年05月16日 19:44
  • 5949

统计一组字符串中字母,数字,空格的个数(C语言原代码)

  • 2011年04月16日 13:55
  • 13KB
  • 下载

统计一组字符串中字母,数字,空格的个数(C语言原代码

  • 2012年09月26日 21:19
  • 418B
  • 下载

/*算法从9个数中取出3个3位数其中两个3位数相加等于另一个3位数其中每位数字不能重复,c语言怎么实现*/

c++ int 取出[9], 位数[3]{0, 0, 0}, 个数(999999999), 序(0), 幕(100), 取; do {/*这里只设计按顺序截取3个3位数的算法,按我对题目所理解...
  • xianfajushi
  • xianfajushi
  • 2014年11月01日 20:38
  • 2227

在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m

【题目分析】在一组数字中是否有n个数,使得这n个数的和等于一给定的定值m。 【思路分析】:分析数据的情况下:   1): 0  2): 0  3): 0 数据小的话:用类似于dp的思路, ...
  • u013050857
  • u013050857
  • 2015年07月25日 16:26
  • 857

随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数

//随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数 //随机给定10个小于10的数字(出现的数字可能重复...
  • feihongxueni
  • feihongxueni
  • 2015年09月09日 15:58
  • 1455

关于Echarts的formatter函数的自定义(图像上显示一组数据的图像,当鼠标移上去的时候显示五组数据)

前端使用echarts3实现tooltip的formatter函数的自定义,实现显示一组图像,tooltip里面显示多组数据...
  • QingFeng_or_qinfeng
  • QingFeng_or_qinfeng
  • 2016年12月15日 09:18
  • 8616

判断scanf接收的数据是否为一组纯数字

Nov.15,2014     为了程序的健壮性,我们需要检查scanf函数接收的数据是否符合输入要求,并提示用户重新输入正确的数据。     以判断输入是否是正整数为例,有以下几种方法:   ...
  • Solomon1558
  • Solomon1558
  • 2014年11月16日 00:21
  • 1534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何求得3个一组的五组数字中相同数字的个数?
举报原因:
原因补充:

(最多只允许输入30个字)