众数问题(为什么只能输入一组数据,不能输入m组数据)

描述

所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,

多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。

现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。

输入
第一行为n,表示测试数据组数。(n<30)
每组测试的第一行是一个整数m,表示多重集S中元素的个数为m
接下来的一行中给出m(m<100)个不大于10万的自然数
(不会出现不同元素出现的次数相同的情况,如:S={11,11,22,22,33,33})。
输出
每组测试数据输出一行,包含两个数,第一个是众数,第二个是其重数,中间以空格隔开。
样例输入
1
6
1 2 2 2 3 5
样例输出
2 3

我的程序:

#include<iostream>
#include<vector>
using namespace std;

struct num
{
int value;
int count;
};

int main()
{
int m;
vector<int>a;
vector<num>b;
cin>>m;
for(int i=0;i<m;i++)
{
int n;
cin>>n;
for(int j=0;j<n;j++)
{
int x;
cin>>x;
a.push_back(x);
}

num c={0,0}; //表示0的个数

for(j=0;i<n;i++)                             //有错,i换成j
{
if(a[j]==0)
c.count++;
}

for(j=0;j<n;j++)
{
int x=1; //表示a[j]出现的次数,因为比较时a[j]本身也算一次,所以x=1;
if(a[j]!=0)
{
for(int k=j+1;k<n;k++)
{
if(a[k]==a[j])
{
x++;
a[k]=0;
}
}

if(x>c.count)
{
c.count=x;
c.value=a[j];
}

a[j]=0;
}
}

b.push_back(c);
a.clear();
}

for(i=0;i<m;i++)
cout<<b[i].value<<" "<<b[i].count<<endl;

return 0;
}

#include<stdio.h>int main(){ int n,m,i,k,a[100],max,sum,j; scanf("%d",&n); while(n--) {  sum=1;  scanf("%d",&m);  for(i=0;i<m;i++)   scanf("%d",&a[i]);  for(j=0,k=0;j<m;j++)  {   for(i=0;i<m;i++)   {    if(a[i]==a[j]) k++;    if(k>sum)     {     sum=k;     max=a[i];    }   }   k=0;  }   printf("%d %d\n",max,sum); } return 0;}(正确解法)
 
时间: 2024-10-15 02:35:18

众数问题(为什么只能输入一组数据,不能输入m组数据)的相关文章

输入一组整数,求子数组和的最大值。(数组进行首尾相接之后)

输入一组整数,求子数组和的最大值. 题目:返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. ? 10 -9 8 7 -5 3 ? i : 4 3 2 1 0 ? nALL : 3 3 7 15 15 16 ? nStart: 3 -2 7 15 6 16 ? nStart = max(arr[i], arr[i]+

关于输入一组数据求最小的问题

问题链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1350 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1408 两个问题,自己第一个代码是没有敲出来的,第二个代码虽然是搞定了, 但是在处理是分析不清楚,使用了两个for循环,导致时间上相对于别人的代码有很大的差距. 自己AC的1408: #include <iostream> #include <algorithm>

easyui combobox 本地数据实现输入中文拼音简码过滤数据

<pre name="code" class="html"><input class="easyui-combobox" name="language" data-options=" data: baseData.emp.ck, width: 105, height: 26, valueField: 'id', textField: 'text', inputCode: 'inputCode', /

输入一组数,找出其中满足某种条件的数(二)

书接上文. 输入一组数,找出其中满足某种条件的数. 短短的一句话,可以衍生出各种场景.今天遇到一道题,输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从大到小输出.分数均为不超过100的非负整数. 我首先想到的是利用哈希表,用空间换时间. 1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int hash[101] = { 0 }; 7 int n = 0; 8 while (cin >>n

二分法检索(控制台输入一组数,找出关键字和最大值)

算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间位置K (2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找.区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,--,high]>T;故新的区间为array[low,--,K-1]b.array[k]<T 类似上面查找区间为array[k+1,--,high

【c语言】输入一组整数,求出最大子序列的和

// 输入一组整数,求出最大子序列的和. // 例如:序列: - 2 11 - 4 13 - 5 - 2,则最大子序列和为20. // 序列: - 6 2 4 - 7 5 3 2 - 1 6 - 9 10 - 2,则最大子序列和为16 #include <stdio.h> int Max_Son(int *p, int len) { int Max_Sum = 0; int i, j; for (i = 0; i < len; ++i) { int sum = 0; for (j = i

工资数据的输入

/* *程序的版权和版本声明部分: *Copyright(c)2014,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:马广明 *完成日期:2014 年 6 月 3 日 *版本号:v1.0 *输入描述: 几个工资数 *问题描述:输入几个工资数,进行排序 *程序输出:排序后的数 *问题分析: *算法设计: */ #include <iostream> using namespace std; int main( ) { double salarys[50

IO-04. 混合类型数据格式化输入(5)

IO-04. 混合类型数据格式化输入(5) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 乔林(清华大学) 本题要求编写程序,顺序读入浮点数1.整数.字符.浮点数2,再按照字符.整数.浮点数1.浮点数2的顺序输出. 输入格式: 输入在一行中顺序给出浮点数1.整数.字符.浮点数2,其间以1个空格分隔. 输出格式: 在一行中按照字符.整数.浮点数1.浮点数2的顺序输出,其中浮点数保留小数点后2位. 输入样例: 2.12 88 c 4

06-0. 混合类型数据格式化输入(5)

本题要求编写程序,顺序读入浮点数1.整数.字符.浮点数2,再按照字符.整数.浮点数1.浮点数2的顺序输出. 输入格式: 输入在一行中顺序给出浮点数1.整数.字符.浮点数2,其间以1个空格分隔. 输出格式: 在一行中按照字符.整数.浮点数1.浮点数2的顺序输出,其中浮点数保留小数点后2位. 输入样例: 2.12 88 c 4.7 输出样例: c 88 2.12 4.70 1 #include <stdio.h> 2 3 int main() 4 { 5 double a, d; 6 int b;

IO-04. 混合类型数据格式化输入

本题要求编写程序,顺序读入浮点数1.整数.字符.浮点数2,再按照字符.整数.浮点数1.浮点数2的顺序输出. 输入格式: 输入在一行中顺序给出浮点数1.整数.字符.浮点数2,其间以1个空格分隔. 输出格式: 在一行中按照字符.整数.浮点数1.浮点数2的顺序输出,其中浮点数保留小数点后2位. 输入样例: 2.12 88 c 4.7 输出样例: c 88 2.12 4.70C语言代码实现: 1 #include <stdio.h> 2 3 int main() 4 { 5 int i; 6 char