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

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/birdzb/article/details/1818751

01:与指定数字相同的数的个数

原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 输出一个整数序列中与指定数字相同的数的个数。 输入输入包含三行: 第一行为N,表示整数序列...
  • mayuan2017
  • mayuan2017
  • 2017-09-10 13:32:06
  • 1128

与指定数字相同的数的个数

1:与指定数字相同的数的个数查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述输出一个整数序列中与指定数字相同的数的个数。输入输入包含三行:第一行为N,表示整数序列的长度(N &...
  • I_HOPE_SOAR
  • I_HOPE_SOAR
  • 2018-02-17 15:44:02
  • 43

1.与指定数字相同的数的个数

描述 输出一个整数序列中与指定数字相同的数的个数。 输入 输入包含三行: 第一行为N,表示整数序列的长度(N 第二行为N个整数,整数之间以一个空格分开; 第三行包含一个整数,...
  • Code_7900x
  • Code_7900x
  • 2017-11-21 19:18:35
  • 667

12:与指定数字相同的数的个数

原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 输出一个整数序列中与指定数字相同的数的个数。 输入输入包含2行: 第1行为N和m,表示整数...
  • mayuan2017
  • mayuan2017
  • 2017-09-05 09:48:05
  • 780

hdu 3434 给你含有n个数的序列,每次你可以选一个子序列将上面所有的数字加1或者减1,目标是把所有数字变成相同的,问最少步数,和那个相同的数字有多少种可能

Problem Description Given a sequence consists of N integers. Each time you can choose a continuou...
  • kongming_acm
  • kongming_acm
  • 2011-10-01 17:11:40
  • 1467

T1102 与指定数字相同的数的个数(#Ⅰ- 5 - 1)

【题目描述】输出一个整数序列中与指定数字相同的数的个数。【输入】输入包含三行:第一行为N,表示整数序列的长度(N ≤ 100);第二行为N个整数,整数之间以一个空格分开;第三行包含一个整数,为指定的数...
  • u011815404
  • u011815404
  • 2018-02-26 02:34:58
  • 82

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

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

C语言 与指定数字相同的数的个数(一维数组)

题目描述 输出一个整数序列中与指定数字相同的数的个数。 输入 输入包含n+2行: 第一行为n,表示整数序列的长度(n...
  • qq_40464403
  • qq_40464403
  • 2017-11-27 09:17:06
  • 291

与指定数字相同的数的个数(noi 1.6-01)

描述 输出一个整数序列中与指定数字相同的数的个数。 输入 输入包含三行: 第一行为N,表示整数序列的长度(N ...
  • Merry2004
  • Merry2004
  • 2017-08-07 22:56:45
  • 272

Kolakoski序列--输入任意数,输出前n个数

package com.main; import java.util.ArrayList; import java.util.List; import java.util.Scanner; pub...
  • u010002184
  • u010002184
  • 2017-08-29 19:49:39
  • 385
收藏助手
不良信息举报
您举报文章:如何求得3个一组的五组数字中相同数字的个数?
举报原因:
原因补充:

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