L1-041__048

L1-041 尋找250 (10 分)

對方不想和你說話,並向你扔了一串數…… 而你必須從這一串數字中找到“250”這個高大上的感人數字。

輸入格式:

輸入在一行中給出不知道多少個絕對值不超過1000的整數,其中保證至少存在一個“250”。

輸出格式:

在一行中輸出第一次出現的“250”是對方扔過來的第幾個數字(計數從1開始)。題目保證輸出的數字在整型範圍內。

輸入樣例:

888 666 123 -233 250 13 250 -222

輸出樣例:

5
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int cnt = 0;
	while(true)
	{
		int x;
		scanf("%d",&x);
		cnt++;
		if(x == 250)
		{
			printf("%d\n",cnt);
			return 0;
		}		
	}
	return 0;
}

L1-042 日期格式化 (5 分)

世界上不同國家有不同的寫日期的習慣。比如美國人習慣寫成“月-日-年”,而中國人習慣寫成“年-月-日”。下面請你寫個程序,自動把讀入的美國格式的日期改寫成中國習慣的日期。

輸入格式:

輸入在一行中按照“mm-dd-yyyy”的格式給出月、日、年。題目保證給出的日期是1900年元旦至今合法的日期。

輸出格式:

在一行中按照“yyyy-mm-dd”的格式給出年、月、日。

輸入樣例:

03-15-2017

輸出樣例:

2017-03-15
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int dd, mm, yy;
	scanf("%d-%d-%d",&mm,&dd,&yy);
	printf("%d-%02d-%02d\n",yy,mm,dd);
	return 0;
}

 


L1-043 閱覽室 (20 分)

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程序結束計時。書號爲不超過1000的正整數。當管理員將0作爲書號輸入時,表示一天工作結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。

注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

輸入格式:

輸入在第一行給出一個正整數N(≤10),隨後給出N天的紀錄。每天的紀錄由若干次借閱操作組成,每次操作佔一行,格式爲:

書號([1, 1000]內的整數) 鍵值SE發生時間hh:mm,其中hh是[0,23]內的整數,mm是[0, 59]內整數)

每一天的紀錄保證按時間遞增的順序給出。

輸出格式:

對每天的紀錄,在一行中輸出當天的讀者借書次數和平均閱讀時間(以分鐘爲單位的精確到個位的整數時間)。

輸入樣例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

輸出樣例:

2 196
0 0
1 60
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int mm;
	int dd;
	int flag;
	node(){flag = 0; mm = 0; dd = 0;}
};
int main()
{
	int n;
	scanf("%d",&n);
	for(int i = 1; i <= n; i ++)
	{
		char str[5];
		int bookid,mm,dd;
		int cnt = 0; //表示借書的次數  
		double sum = 0;//表示的是總時間 
		node s[1005];
		while(true)
		{
			scanf("%d %s %d:%d",&bookid,str,&mm,&dd);
			if(bookid == 0)
			{
				if(cnt != 0)
					printf("%d %.0lf\n",cnt,sum / (cnt * 1.0));
				else 
					printf("0 0\n");
				break;
			}else 
			{
				if(str[0] == 'S') //XXXXXXXXX我去
				{
					s[bookid].flag = 1;
					s[bookid].mm = mm;
					s[bookid].dd = dd;
				}
				else if(str[0] == 'E' && s[bookid].flag == 1) 
				{
					s[bookid].flag = 0; 
					cnt++;
					sum += mm * 60 + dd - s[bookid].mm * 60 - s[bookid].dd;
				}
			}	
		}
	}
	return 0;
}

L1-044 穩贏 (15 分)

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:

現要求你編寫一個穩贏不輸的程序,根據對方的出招,給出對應的贏招。但是!爲了不讓對方輸得太慘,你需要每隔K次就讓一個平局。

輸入格式:

輸入首先在第一行給出正整數K(≤10),即平局間隔的次數。隨後每行給出對方的一次出招:ChuiZi代表“錘子”、JianDao代表“剪刀”、Bu代表“布”。End代表輸入結束,這一行不要作爲出招處理。

輸出格式:

對每一個輸入的出招,按要求輸出穩贏或平局的招式。每招佔一行。

輸入樣例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

輸出樣例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

 

#include<bits/stdc++.h>
using namespace std;
map<string,string>mp;
int main()
{
	int k;
	scanf("%d", &k);
	char str1[20];
	mp["ChuiZi"] = "Bu";
	mp["Bu"] = "JianDao";
	mp["JianDao"] = "ChuiZi";
	int cnt = 0;
	while(scanf("%s",str1)!=EOF)
	{
		if(strcmp(str1,"End") == 0)
			break;
		cnt++;
		if(cnt <= k){
			cout<<mp[str1]<<endl;
		}else 
		{
			cnt = 0;
			cout<<str1<<endl;
		}
		
	}
	return 0;
}

 

 


L1-045 宇宙無敵大招呼 (5 分)

據說所有程序員學習的第一個程序都是在屏幕上輸出一句“Hello World”,跟這個世界打個招呼。作爲天梯賽中的程序員,你寫的程序得高級一點,要能跟任意指定的星球打招呼。

輸入格式:

輸入在第一行給出一個星球的名字S,是一個由不超過7個英文字母組成的單詞,以回車結束。

輸出格式:

在一行中輸出Hello S,跟輸入的S星球打個招呼。

輸入樣例:

Mars

輸出樣例:

Hello Mars
#include<bits/stdc++.h>
using namespace std;
int main()
{
	char str[20];
	scanf("%s",str);
	printf("Hello %s\n",str);
	return 0;
}

L1-046 整除光棍 (20 分)

這裏所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程序要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然後,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。

提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x爲止。但難點在於,s可能是個非常大的數 —— 比如,程序輸入31,那麼就輸出3584229390681和15,因爲31乘以3584229390681的結果是111111111111111,一共15個1。

輸入格式:

輸入在一行中給出一個不以5結尾的正奇數x(<1000)。

輸出格式:

在一行中輸出相應的最小的sn,其間以1個空格分隔。

輸入樣例:

31

輸出樣例:

3584229390681 15

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
int main()
{
	ll cnt = 1,now = 1,x;
	scanf("%lld", &x);
	while(now < x){
		now = now * 10 + 1; 
		cnt++; 
	}
	while(true)
	{
		if(now % x == 0)
		{
			printf("%d %d\n",now / x, cnt );
			return 0;
		}else 
		{
			int t = now / x;
			printf("%d",t);
			now = now - (t * x);
			now = now * 10 + 1;
			cnt++;
		}
	}
	return 0;
}

 


L1-047 裝睡 (10 分)

你永遠叫不醒一個裝睡的人 —— 但是通過分析一個人的呼吸頻率和脈搏,你可以發現誰在裝睡!醫生告訴我們,正常人睡眠時的呼吸頻率是每分鐘15-20次,脈搏是每分鐘50-70次。下面給定一系列人的呼吸頻率與脈搏,請你找出他們中間有可能在裝睡的人,即至少一項指標不在正常範圍內的人。

輸入格式:

輸入在第一行給出一個正整數N(≤10)。隨後N行,每行給出一個人的名字(僅由英文字母組成的、長度不超過3個字符的串)、其呼吸頻率和脈搏(均爲不超過100的正整數)。

輸出格式:

按照輸入順序檢查每個人,如果其至少一項指標不在正常範圍內,則輸出其名字,每個名字佔一行。

輸入樣例:

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71

輸出樣例:

Tom
Zoe
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n ; i ++)
	{
		char str[20];
		int x, y;
		scanf("%s %d %d", str, &x, &y);
		if(x < 15 || x > 20 || y > 70 || y < 50)
		{
			printf("%s\n",str);
		}
	}
	return 0;
}

 


L1-048 矩陣A乘以B (15 分)

給定兩個矩陣A和B,要求你計算它們的乘積矩陣AB。需要注意的是,只有規模匹配的矩陣纔可以相乘。即若A有R​a​​行、C​a​​列,B有R​b​​行、C​b​​列,則只有C​a​​與R​b​​相等時,兩個矩陣才能相乘。

輸入格式:

輸入先後給出兩個矩陣A和B。對於每個矩陣,首先在一行中給出其行數R和列數C,隨後R行,每行給出C個整數,以1個空格分隔,且行首尾沒有多餘的空格。輸入保證兩個矩陣的R和C都是正數,並且所有整數的絕對值不超過100。

輸出格式:

若輸入的兩個矩陣的規模是匹配的,則按照輸入的格式輸出乘積矩陣AB,否則輸出Error: Ca != Rb,其中Ca是A的列數,Rb是B的行數。

輸入樣例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

輸出樣例1:

2 4
20 22 24 16
53 58 63 28

輸入樣例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

輸出樣例2:

Error: 2 != 3
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int ma1[105][105] = {0};
	int ma2[105][105] = {0};
	int ma3[105][105] = {0};
	int row1,row2,col1,col2;
	scanf("%d %d",&row1, &col1);
	for(int i = 1; i <= row1; i ++)
	{
		for(int j = 1; j <= col1; j ++)
			scanf("%d", &ma1[i][j]);
	}
	scanf("%d %d",&row2,&col2);
	for(int i = 1; i <= row2; i ++)
	{
		for(int j = 1 ; j <= col2; j++)
			scanf("%d", &ma2[i][j]);
	}
	if(col1 != row2)
	{
		printf("Error: %d != %d\n",col1, row2);
		return 0;
	}
	for(int i = 1; i <= row1; i ++)
	{
		for(int j = 1; j <= col2; j++)
		{
			for(int k = 1; k <= col1; k++)
			{
				ma3[i][j] += ma1[i][k] * ma2[k][j];
			}
		}
	}
	printf("%d %d\n",row1,col2);
	for(int i = 1; i <= row1; i ++)
	{
		for(int j = 1; j <= col2; j ++)
			printf("%d%c",ma3[i][j]," \n"[j == col2]);
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章