PTA|團體程式設計天梯賽-練習題目題解錦集(持續更新中) 實現語言:C/C++; 歡迎各位看官交流討論、指導題解錯誤;或者分享更快的方法!! 題目鏈接:https://pintia.cn/problem-sets/994805046380707840/problems 目錄 (點擊對應題目即可進入 ...
PTA|團體程式設計天梯賽-練習題目題解錦集(持續更新中)
實現語言:C/C++; 歡迎各位看官交流討論、指導題解錯誤;或者分享更快的方法!!
題目鏈接:https://pintia.cn/problem-sets/994805046380707840/problems
目錄
(點擊對應題目即可進入相應題解……小聲BB……)
L1-001 Hello World (5 分)
這道超級簡單的題目沒有任何輸入。
你只需要在一行中輸出著名短句“Hello World!”就可以了。
輸入樣例:
無
輸出樣例:
Hello World!
題目代碼:
#include<stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
L1-002 列印沙漏 (20 分)
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印
*****
***
*
***
*****
所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。
給定任意N個符號,不一定能正好組成一個沙漏。要求列印出的沙漏能用掉儘可能多的符號。
輸入格式:
輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。
輸出格式:
首先列印出由給定符號組成的最大的沙漏形狀,最後在一行中輸出剩下沒用掉的符號數。
輸入樣例:
19 *
輸出樣例:
*****
***
*
***
*****
2
題目代碼:
#include <stdio.h>
int main()
{
int n;
char c;
scanf("%d %c",&n,&c);
int sum=1;//沙漏需要的字元個數
int i=1;//層數
while(sum<=n)
{
sum+=2*(2*(i+1)-1);//2n-1是一層的個數,乘以2代表兩層一共需要的
if(sum<=n)
i++;
}
int j,k;
for(j=0;j<i;j++)//列印上半部分
{
for(k=0;k<j;k++)
printf(" ");
for(k=0;k<2*(i-j)-1;k++)
{
printf("%c",c);
}//輸出*
printf("\n");
}
for(j=2;j<=i;j++)
{
for(k=0;k<i-j;k++)
printf(" ");
for(k=0;k<2*j-1;k++)
{
printf("%c",c);
}
printf("\n");
}
printf("%d",n-(sum-2*(2*(i+1)-1)));
}
L1-003 個位數統計 (15 分)
給定一個 k 位整數 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),請編寫程式統計每種不同的個位數字出現的次數。例如:給定 N=100311,則有 2 個 0,3 個 1,和 1 個 3。
輸入格式:
每個輸入包含 1 個測試用例,即一個不超過 1000 位的正整數 N。
輸出格式:
對 N 中每一種不同的個位數字,以 D:M
的格式在一行中輸出該位數字 D
及其在 N 中出現的次數 M
。要求按 D
的升序輸出。
輸入樣例:
100311
輸出樣例:
0:2
1:3
3:1
題目代碼:
#include<iostream>
#include<cstring>
#define MAXN 1001
using namespace std;
int main()
{
char s[MAXN];
int book[10]={0};
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
book[s[i]-48]++;
for(int i=0;i<10;i++)
{
if(book[i]!=0)
cout << i << ":" << book[i] << endl;
}
return 0;
}
L1-004 計算攝氏溫度 (5 分)
給定一個華氏溫度F,本題要求編寫程式,計算對應的攝氏溫度C。計算公式:C=5×(F−32)/9。題目保證輸入與輸出均在整型範圍內。
輸入格式:
輸入在一行中給出一個華氏溫度。
輸出格式:
在一行中按照格式“Celsius = C”輸出對應的攝氏溫度C的整數值。
輸入樣例:
150
輸出樣例:
Celsius = 65
題目代碼:
#include<iostream>
using namespace std;
int main()
{
int n,c;
scanf("%d",&n);
c=5*(n-32)/9;
printf("Celsius = %d\n",c);
return 0;
}
L1-005 考試座位號 (15 分)
每個 PAT 考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常情況下,考生在入場時先得到試機座位號碼,入座進入試機狀態後,系統會顯示該考生的考試座位號碼,考試時考生需要換到考試座位就座。但有些考生遲到了,試機已經結束,他們只能拿著領到的試機座位號碼求助於你,從後臺查出他們的考試座位號碼。
輸入格式:
輸入第一行給出一個正整數 N(≤1000),隨後 N 行,每行給出一個考生的信息:准考證號 試機座位號 考試座位號
。其中准考證號
由 14 位數字組成,座位從 1 到 N 編號。輸入保證每個人的准考證號都不同,並且任何時候都不會把兩個人分配到同一個座位上。
考生信息之後,給出一個正整數 M(≤N),隨後一行中給出 M 個待查詢的試機座位號碼,以空格分隔。
輸出格式:
對應每個需要查詢的試機座位號碼,在一行中輸出對應考生的准考證號和考試座位號碼,中間用 1 個空格分隔。
輸入樣例:
4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4
輸出樣例:
10120150912002 2
10120150912119 1
題目代碼:
//L1-005 考試座位號
#include<iostream>
#define MAXN 1001
using namespace std;
struct STU{
char s[15];
int shiji;
int kaoshi;
};
int main()
{
struct STU stu[MAXN]={0};
int N,M;
// int a[MAXN][MAXN]={0};
cin >> N;
for(int i=0;i<N;i++)
scanf("%s %d %d",stu[i].s,&stu[i].shiji,&stu[i].kaoshi);
int k;
scanf("%d",&M);
for(int i=0;i<M;i++)
{
scanf("%d",&k);
for(int j=0;j<N;j++)
if(k==stu[j].shiji)
{
cout << stu[j].s << " " << stu[j].kaoshi << endl;
break;
}
}
return 0;
}
L1-006 連續因數 (20 分)
一個正整數 N 的因數中可能存在若幹連續的數字。例如 630 可以分解為 3×5×6×7,其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N,要求編寫程式求出最長連續因數的個數,並輸出最小的連續因數序列。
輸入格式:
輸入在一行中給出一個正整數 N(1<N<231)。
輸出格式:
首先在第 1 行輸出最長連續因數的個數;然後在第 2 行中按 因數1*因數2*……*因數k
的格式輸出最小的連續因數序列,其中因數按遞增順序輸出,1 不算在內。
輸入樣例:
630
輸出樣例:
3
5*6*7
題目代碼 :
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
ll prd=0;//定義乘積
int start=0,len=0;//定義最終得到序列開始的因數,序列的長度
for(int i=2;i<=sqrt(n);i++)//i從2到根號n
{
prd=1;
for(int j=i;prd*j<=n;j++)//從j開始一直乘到N為止,每次乘積判定是否小於等於N,若超過N,則結束迴圈
{
prd*=j;//乘積迭代
if(n%prd==0&&j-i+1>len)//如果當前乘積為N的乘積因數且長度大於上一次
{//更新序列起始因數和長度
start=i;
len=j-i+1;
}
}
}
if(start==0)//若起始因數為0,說明N為質數,因為質數=1*本身,而迴圈最多能表示1*本身的根號
{
start=n;
len=1;
}
cout<<len<<'\n'<<start;
for(int i=start+1;i<start+len;i++)//輸出,如果因數只有一個只輸出一個
cout<<'*'<<i;
return 0;
}
L1-007 念數字 (10 分)
輸入一個整數,輸出每個數字對應的拼音。當整數為負數時,先輸出fu
字。十個數字對應的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
輸入格式:
輸入在一行中給出一個整數,如:1234
。
提示:整數包括負數、零和正數。
輸出格式:
在一行中輸出這個整數對應的拼音,每個數字的拼音之間用空格分開,行末沒有最後的空格。如 yi er san si
。
輸入樣例:
-600
輸出樣例: