例2.5 | 統(tǒng)計(jì)同成績學(xué)生人數(shù) | (九度教程第10題) |
---|---|---|
時(shí)間限制:1秒 | **內(nèi)存限制:32兆 ** | 特殊判題:否 |
題目描述:
讀入N名學(xué)生的成績额衙,將獲得某一給定分?jǐn)?shù)的學(xué)生人數(shù)輸出霎褐。
輸入:
測試輸入包含若干測試用例陋葡,每個(gè)測試用例的格式為
第1行:N
第2行:N名學(xué)生的成績右莱,相鄰兩數(shù)字用一個(gè)空格間隔桃笙。
第3行:給定分?jǐn)?shù)
當(dāng)讀到N=0時(shí)輸入結(jié)束氏堤。其中N不超過1000,成績分?jǐn)?shù)為(包含)0到100之間的一個(gè)整數(shù)。
輸出:
對每個(gè)測試用例鼠锈,將獲得給定分?jǐn)?shù)的學(xué)生人數(shù)輸出闪檬。
樣例輸入:
3
80 60 90
60
2
85 66
0
5
60 75 90 55 75
75
0
樣例輸出:
1
0
2
來源:
2006年浙江大學(xué)計(jì)算機(jī)及軟件工程研究生機(jī)試真題
#include <stdio.h>
int main () {
int n;
while (scanf ("%d",&n) != EOF && n != 0) {
int Hash[101] = {0}; //輸入判斷增加對n是否等于零進(jìn)行 判斷
for (int i = 1;i <= n;i ++) {//建立一個(gè)初始為0的Hash數(shù)組用來記錄各種分?jǐn)?shù)出現(xiàn)的次 數(shù)
int x;
scanf ("%d",&x);
Hash[x] ++; //統(tǒng)計(jì)分?jǐn)?shù)出現(xiàn)次數(shù)
}
int x;
scanf ("%d",&x);
printf("%d\n",Hash[x]); //得到需要查詢的目標(biāo)分?jǐn)?shù)后,只需簡單的查詢我們統(tǒng) 計(jì)的數(shù)量即可
}
return 0;
}
例2.6 | Sort | (九度教程第11題) |
---|---|---|
時(shí)間限制:1秒 | **內(nèi)存限制:32兆 ** | 特殊判題:否 |
題目描述:
給你n個(gè)整數(shù),請按從大到小的順序輸出其中前m大的數(shù)购笆。
輸入:
每組測試數(shù)據(jù)有兩行粗悯,第一行有兩個(gè)數(shù)n,m(0<n,m<1000000),第二行包含n個(gè)各不相同同欠,且都處于區(qū)間[-500000,500000]的整數(shù)样傍。
輸出:
對每組測試數(shù)據(jù)按從大到小的順序輸出前m大的數(shù)。
樣例輸入:
5 3
3 -35 92 213 -644
樣例輸出:
213 92 3
#include <stdio.h>
#define OFFSET 500000 //偏移量,用于補(bǔ)償實(shí)際數(shù)字與數(shù)組下標(biāo)之間偏移
int Hash[1000001]; //偏移量,用于補(bǔ)償實(shí)際數(shù)字與數(shù)組下標(biāo)之間偏移
int main () {
int n , m;
while (scanf ("%d%d",&n,&m) != EOF) {
for (int i = -500000;i <= 500000;i ++) {
Hash[i + OFFSET] = 0;
}//初始化,將每個(gè)數(shù)字都標(biāo)記為未出現(xiàn)
for (int i = 1;i <= n;i ++) {
int x;
scanf ("%d",&x);
Hash[x + OFFSET] = 1; //凡是出現(xiàn)過的數(shù)字,該數(shù)組元素均被設(shè)置成1
}
for (int i = 500000;i >= -500000;i --) { //輸出前m個(gè)數(shù)
if (Hash[i + OFFSET] == 1) { //若該數(shù)字在輸入中出現(xiàn)
printf("%d",i); //輸出該數(shù)字
m --; //輸出一個(gè)數(shù)字后,m減一,直至m變?yōu)?
if (m != 0) printf(" "); //注意格式,若m個(gè)數(shù)未被輸出完畢,在輸出的
數(shù)字后緊跟一個(gè)空格
else {
printf("\n"); //若m個(gè)數(shù)字已經(jīng)被輸出完畢,則在輸出的數(shù)字后面緊跟
一個(gè)換行,并跳出遍歷循環(huán)
break;
}
}
}
}
return 0;
}
題目1156 | 誰是你的潛在朋友 | (九度教程第12題) |
---|---|---|
時(shí)間限制:1秒 | **內(nèi)存限制:32兆 ** | 特殊判題:否 |
題目描述:
“臭味相投”——這是我們描述朋友時(shí)喜歡用的詞匯铺遂。兩個(gè)人是朋友通常意味著他們存在著許多共同的興趣衫哥。然而作為一個(gè)宅男,你發(fā)現(xiàn)自己與他人相互了解的機(jī)會并不太多襟锐。幸運(yùn)的是撤逢,你意外得到了一份北大圖書館的圖書借閱記錄,于是你挑燈熬夜地編程粮坞,想從中發(fā)現(xiàn)潛在的朋友蚊荣。 首先你對借閱記錄進(jìn)行了一番整理,把N個(gè)讀者依次編號為1,2,…,N莫杈,把M本書依次編號為1,2,…,M妇押。同時(shí),按照“臭味相投”的原則姓迅,和你喜歡讀同一本書的人,就是你的潛在朋友俊马。你現(xiàn)在的任務(wù)是從這份借閱記錄中計(jì)算出每個(gè)人有幾個(gè)潛在朋友丁存。
輸入:
每個(gè)案例第一行兩個(gè)整數(shù)N,M,2 <= N 柴我,M<= 200解寝。接下來有N行,第i(i = 1,2,…,N)行每一行有一個(gè)數(shù)艘儒,表示讀者i-1最喜歡的圖書的編號P(1<=P<=M)
輸出:
每個(gè)案例包括N行聋伦,每行一個(gè)數(shù),第i行的數(shù)表示讀者i有幾個(gè)潛在朋友界睁。如果i和任何人都沒有共同喜歡的書觉增,則輸出“BeiJu”(即悲劇,^ ^)
樣例輸入:
4 5
2
3
2
1
樣例輸出:
1
BeiJu
1
BeiJu
來源:
2011年北京大學(xué)計(jì)算機(jī)研究生機(jī)試真題
#include <stdio.h>
int main () {
int n,m;
while (scanf ("%d %d",&n,&m) != EOF) {
int a[n+1];
int Hash[200] = {0}; //輸入判斷增加對n是否等于零進(jìn)行 判斷
for (int i = 1;i <= n;i ++) {//建立一個(gè)初始為0的Hash數(shù)組用來記錄各種分?jǐn)?shù)出現(xiàn)的次 數(shù)
int x;
scanf ("%d",&x);
a[i]=x;
Hash[x] ++; //統(tǒng)計(jì)分?jǐn)?shù)出現(xiàn)次數(shù)
}
for (int i = 1;i <= n;i ++) {
if( Hash[a[i]]==1||Hash[a[i]]==0 ) printf("BeiJu\n"); //得到需要查詢的目標(biāo)分?jǐn)?shù)后,只需簡單的查詢我們統(tǒng) 計(jì)的數(shù)量即可
else printf("%d\n",Hash[a[i]]-1);
}
}
return 0;
}
//總是error
//Hash【x】錯誤
//沒按要求讀取
題目1088:剩下的樹
時(shí)間限制:1 秒
內(nèi)存限制:32 兆
特殊判題:否
提交:7444
解決:3379
題目描述:
有一個(gè)長度為整數(shù)L(1<=L<=10000)的馬路翻斟,可以想象成數(shù)軸上長度為L的一個(gè)線段逾礁,起點(diǎn)是坐標(biāo)原點(diǎn),在每個(gè)整數(shù)坐標(biāo)點(diǎn)有一棵樹访惜,即在0,1,2嘹履,...腻扇,L共L+1個(gè)位置上有L+1棵樹。 現(xiàn)在要移走一些樹砾嫉,移走的樹的區(qū)間用一對數(shù)字表示幼苛,如 100 200表示移走從100到200之間(包括端點(diǎn))所有的樹。 可能有M(1<=M<=100)個(gè)區(qū)間焕刮,區(qū)間之間可能有重疊〔把兀現(xiàn)在要求移走所有區(qū)間的樹之后剩下的樹的個(gè)數(shù)。
輸入:
兩個(gè)整數(shù)L(1<=L<=10000)和M(1<=M<=100)济锄。 接下來有M組整數(shù)暑椰,每組有一對數(shù)字。
輸出:
可能有多組輸入數(shù)據(jù)荐绝,對于每組輸入數(shù)據(jù)一汽,輸出一個(gè)數(shù),表示移走所有區(qū)間的樹之后剩下的樹的個(gè)數(shù)低滩。
樣例輸入:
500 3
100 200
150 300
470 471
樣例輸出:
298
來源:
2011年清華大學(xué)計(jì)算機(jī)研究生機(jī)試真題
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int Hash[10000];
int main () {
int L , M;
while (scanf ("%d%d",&L,&M) != EOF) {
int x, y, count = 0;
for (int i = 0;i <= L;i ++) {
Hash[i] = 1;
}
for (int i = 0;i < M;i ++) {
scanf ("%d%d",&x,&y);
for( int j=x; j<=y ; j++)
Hash[j] --;
}
for (int i = 0;i <= L;i ++) {
if (Hash[i] == 1) count++;
}
printf("%d\n",count);
}
return 0;
}
// count 沒有在while()里面初始化導(dǎo)致錯誤