1. 程式人生 > >NOI 1.13 15:求序列中的眾數

NOI 1.13 15:求序列中的眾數

15:求序列中的眾數

總時間限制:
1000ms
記憶體限制:
65536kB
描述

輸入一個長度為N的整數序列 (不多於128個整數),每個整數的範圍在[-1052,1052],計算這個序列的眾數。

眾數是指出現次數最多的那個數。

如果有多個數出現的次數都達到最多,則取在原序列最先出現的數為眾數;如果所有的數都相等,則返回"no"。

輸入
第一行為序列長度N。

然後是N個數,每一個數的範圍都是在[-10^52,10^52]。 注意,這N個數之間可能有若干個空行隔開。

注意,輸入資料可能有一些冗餘表達資訊,具體來說:

1) 正數和0前面可能有前導0和'+'符號,例如
+000123=123
+0000=0
-0000=0
2)每個數字中不含有空格和其他非數字字元,例如不會出現"100 0"或者"- 100"。
3)每個數字前面至多有一個符號,即不會出現+(-1)、-(+4)和-(-1)等情況。
輸出
輸出只有 1 行:

該序列的眾數或者”no”。

如果有多個數出現的次數都達到最多,則取最先出現的數為眾數,並且輸出形式應該最簡形式。

例如,如果原序列眾數為+000123,則輸出123;如果原序列眾數為+0000或者-0000或者0000,輸出0。

負數正常輸出,例如:如果原序列眾數為-000000001111,就輸出-1111。
樣例輸入
6
-00001
10000
00011111111111111111111111111111111111
-01
+000000011111111111111111111111111111111111
-00000000000001
樣例輸出
-1

程式碼:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

struct data{
	int sum;
	char c[10000];
}p[130];

void fun(char *w,int k,int f){//化簡有效數字 
	if(w[0]=='+'||w[0]=='-')k++;
	if(w[0]=='-')f=0;
	while(w[k]=='0')k++;
	
	char t[1000];
	int j=0;
	if(!f){
		t[0]='-';
		j++;
	}
	for(int i=k;w[i]!='\0';i++){
		t[j]=w[i];
		j++;
	}
	t[j]='\0';
	
	if(strcmp(t,"-")==0)strcpy(t,"0");
	else if(strcmp(t,"")==0)strcpy(t,"0");
	strcpy(w,t);
}

int main(){
	int n,num=0,maxsum=1;
	char c[1000];
	scanf("%d",&n);
	
	int len=0; 
	while(n!=num){
		char w[10000];
		int f=1;
		scanf("%s",w);
		if(strcmp(w,"")==0)continue;
		
		int k=0,j;
		fun(w,k,f);
//		printf("-- %s\n",w);
		
		for(j=0;j<len;j++){
			if(strcmp(p[j].c,w)==0){
				p[j].sum++;
				break;
			}
		}
		if(j>=len){
			strcpy(p[len].c,w);
			p[len].sum=1;
			len++;
		}

		num++;
	}
	if(len==1&&n>len)printf("no\n");
	else{
		int k=0;
		for(int i=0;i<len;i++){
//			printf("-- %d\n",p[i].sum);
			if(p[i].sum>p[k].sum)k=i;
		}
		printf("%s\n",p[k].c);
	}
	return 0;
}

相關推薦

NOI 1.13 15:序列

15:求序列中的眾數 檢視提交統計提問 總時間限制: 1000ms記憶體限制: 65536kB描述 輸入一個長度為N的整數序列 (不多於128個整數),每個整數的範圍在[-1052,1052]

noi.openjudge 1.13.15

總時間限制: 1000ms記憶體限制: 65536kB描述輸入一個長度為N的整數序列 (不多於128個整數),每個整數的範圍在[-1052,1052],計算這個序列的眾數。 眾數是指出現次數最多的那個數。 如果有多個數出現的次數都達到最多,則取在原序列最先出現的數為眾數;如果

序列

描述 輸入一個長度為N的整數序列 (不多於128個整數),每個整數的範圍在[-1052,1052],計算這個序列的眾數。 眾數是指出現次數最多的那個數。 如果有多個數出現的次

python實現給定一個數和陣列,陣列之和為給定的

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例:給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返

(七)一個尋找陣列的演算法

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. You ma

實驗7-1-11 整數序列出現次數最多的15 分)(結構陣列排序)

浙大版《C語言程式設計實驗與習題指導(第3版)》題目集 實驗7-1-11 求整數序列中出現次數最多的數 (15 分) 本題要求統計一個整型序列中出現次數最多的整數及其出現次數。 輸入格式: 輸入在一行中給出序列中整數個數N(0<N≤1000),以及N個整數

有一個分數序列2/1,3/2,5/3,8/5,13/8...前20項之和

#include <stdio.h>  #include <conio.h>  int main(){    int a=2,b=1,c=0,n=1;    double d=

【C語言】序列2/1+3/2+5/3+8/5+13/8+........前20項和。

我們能直接從序列上觀察出規律:(1)首先每一項的分母都與其前一項的分子相等, (2)每一項的分子都等於其前一項的分子與分母和。知道了規律,我們就好辦事兒!#include <stdio.h> int main () { double i = 2.0,j =

5-29 整數序列出現次數最多的 (15分)

5-29 求整數序列中出現次數最多的數   (15分) 本題要求統計一個整型序列中出現次數最多的整數及其出現次數。 輸入格式: 輸入在一行中給出序列中整數個數N(0<<N\le≤1

c語言:有一個分數序列: 2/1+3/2+5/3+8/5+13/8+… 出這個數列前 20 項的和

程式:#include <stdio.h>int main(){   double s=0,a=2,b=1;   int t,i,n=20;  //改變n的值即可求任意項的和   for (

25.1~13的整數1出現的次數,並算出100~1300的整數1出現的次數?為此他特別了一下1~13包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。AC

題目:求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。AC

循環-10. 序列前N項和(15)

sum adding p s ros 小數 ... pac ron 循環 本題要求編敲代碼,計算序列 2/1+3/2+5/3+8/5+... 的前N項之和。註意該序列從第2項起,每一項的分子是前一項分子與分母的和,分母是前一項的分子。 輸入格式: 輸入在一行中給出

1次作業:迷茫光明

專業課 開心 很多 認知 人生 一份 社團 我們 ssi 在不知道未來的時候,要把握住現在。 第一部分:結緣計算機 你為什麽選擇計算機專業?你認為你的條件如何?和這些博主比呢?(必答) 我上大學之前對於計算機專業真的了解不多,頂多知道它是一個

六周第一次課(115日) 9.1 正則介紹_grep上 9.2 grep 9.3 grep下

let lar fas pass tor 前三 pcap 標示 get 六周第一次課(1月15日)9.1 正則介紹_grep上9.2 grep中9.3 grep下 在計算機科學中,對“正則表達式" 的定義是:它使用單個字符串來描述或匹配一系列符合某個句法規則的字符串。在很多

從無序序列這個序列排序後鄰點間最大差值的O(n)算法

算法 之間 一個 差值 最小 size 復雜度 play 實現 標題可能比較繞口,簡單點說就是給你一個無序數列A={a1,a2,a3……an},如果你把這個序列排序後變成序列B,求序列B中相鄰兩個元素之間相差數值的最大值。 註意:序列A的元素的大小在[1,2^31-1]之間

連續自然數序列位數方案

計算 方案 獲取 位操作 最大的 移位操作 中位數 計算機 最小 描述:   有一組連續的有序的自然數,需要獲取這組自然數的中位數,自然數從 low -> high,low表示最小的,high表示最大的數   第一種方案:     (low+high)/2 -1   

二進制有多少個1

討論 val != 關註 運算 解決方法 pre return 1的個數 求一個 n 位的整數的二進制表式中有x個 1。 樣例:給定 32 (100000),返回 1;給定 5 (101),返回 2;給定 1023 (111111111),返回 9 解決方法:num &a

隨機生成60位同學成績,並他們的平均數,位數,

nbsp ret list () random rand sta import count import randomimport numpy as npdef random_int_list(start, stop, length): start, stop = (