为了账号安全,请及时绑定邮箱和手机立即绑定

求解!!!!

想问问大神们一个题目:输入一个整数n,再输入n个整数,由小到大输出有重复的整数及其重复次数。求解

正在回答

7 回答

#include <iostream>

#include <cstring>

using namespace std;


int main()

{

    int n;

    cin>>n;

    int a[10000],b[10000];

    memset(b,0,sizeof(b));

    for(int i=0 ;i<n;i++)

    {

        cin>>a[i];

        b[a[i]]++;//b数组来记录对应数字出现的次数,这种方法很不实用

    }

    for(int i=0 ;i<n;i++)

    {

        if(b[i]>1)

        {

            cout<<a[i]<<endl;

        }

    }

    return 0;

}


0 回复 有任何疑惑可以回复我~

有点多,还有一个错别字,但是这些都不重要,可以运行,你要是想改进可以自己试试,copy过去运行看看能不能用,好用的话给最佳呦= =!

0 回复 有任何疑惑可以回复我~
#include <stdio.h>
#include <stdlib.h>
#define RANGE 1000
int main(int argc, char const *argv[])
{
    //size_t i;	//只有1000以内,int也可以
    //int integer=0;
    //int array[RANGE] = { 0 };	//array是关键字,不能作变量名
	////////////
	int i=0;
	int j=0;	//i和j只用作循环
	int size=0;	//输入的个数
	int temp;	//用于交换两个数
	int count=1;//重复次数
	int isRepeated=0;	//整个数组是否一次重复都没有
	int arr[RANGE]={0};	//存储数据
 
	//printf("Input a interger n: ");
    printf("Enter the number that you want input!(0<=n<=1000)\n");

    //while ( scanf(" %d", &integer) && integer >= 0 ) {
    //    if (integer < RANGE)
    //    array[integer]++;	//我知道你想把输入的数存进数组,但是这是错误的
    //}

	scanf("%d",&size);
	if(size<=0){		//先判断要输入的个数是否合法
		printf("input error!\n");
		system("pause");
		return 0;
	}
	printf("Please Enter !\n");
	for(i=0;i<size;++i){	//这步不用解释吧
		scanf("%d",&arr[0+i]);
	}

    //for (i = 0; i < RANGE; ++i)
    //{
    //    if ( array[i] !=0 )
    //    printf(" number:%d times:|%d| ", i, array[i]);
    //}

	for(i=0;i<size-1;++i){	//既然要从小到大输出重复的,那就先把所有的数排个序
		for(j=1;j<size-i;++j){			//我这里用冒泡排序
			if(arr[j-1]>arr[j]){
				temp=arr[j];
				arr[j]=arr[j-1];
				arr[j-1]=temp;
			}
		}
	}
	temp=arr[0];
	for(i=1;i<size;++i){			//判断重复并输出
		if(temp!=arr[i]){			//排序好了之后判断第一次出现的数与其后面出现是否相同
			if(count>1){
				printf("%d\tappear %d times\n",arr[i-1],count);
			}
			count=1;
			temp=arr[i];
		}else{
			count=count+1;
			isRepeated=1;
			if(i==size-1){	//当最后一个数与前面的数相等是,因为已经到达边界,直接输出即可
				printf("%d\tappear %d times\n",arr[i-1],count);
			}
		}
	}
	if(isRepeated==0){
		printf("There is no duplication\n");
	}
	//for(i=0;i<size;++i){		//全部输出,测试用途
	//	printf("%d\t",arr[i]);
	//}
  
	printf("\n");
    system("pause");
    return 0;
}


0 回复 有任何疑惑可以回复我~

回答问题之前,我想问一下,朋友你是台湾的吗

0 回复 有任何疑惑可以回复我~

由於視頻緩衝很慢,等待中寫了一個很原始的方法,有一些限制,輸入範圍是[0,RANGE]的所有整數,輸入負整數來結束輸入,RANGE是巨集定義在開頭後面的數字可以自己在編譯前改。 

#include <stdio.h>
#include <stdlib.h>
#define RANGE 1000
int main(int argc, char const *argv[])
{
	size_t i;
	int integer;
	int array[RANGE] = { 0 };

	printf("Input a interger n: ");
	while ( scanf(" %d", &integer) && integer >= 0 ) {
		if (integer < RANGE)
		array[integer]++;
	}
	for (i = 0; i < RANGE; ++i)
	{
		if ( array[i] !=0 )
		printf(" number:%d times:|%d| ", i, array[i]);
	}
 
	system("pause");
	return 0;
}


0 回复 有任何疑惑可以回复我~

求 C++代码

0 回复 有任何疑惑可以回复我~

这个用map做就好了吧

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75188    人
  • 解答问题       251    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

求解!!!!

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号