PTA 程序设计天梯赛(161~180题)
Posted 王睿丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 程序设计天梯赛(161~180题)相关的知识,希望对你有一定的参考价值。
文章目录
原创不易,有用请点个赞,感谢各位!
161、单词长度 (15 分)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式:
输入在一行中给出一行文本,以.结束
提示:用scanf("%c",…);来读入一个字符,直到读到.为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It’s great to see you here.
输出样例:
4 5 2 3 3 4
#include<stdio.h>
int main()
{
/* 这道题有四大最坑的点
1. 第一个是只有一个单词的时候,开头不能有多余的空格,结尾有一个空格时,也一样
2. 第二个就是当次数为0时不显示
3. 第三是一定要注意空格不能有多余无论首、尾、还是中
*/
char c;
int flag=1; //控制空格打印不能多余
int k=0;
scanf("%c",&c);
while(c!='.') //如果只有一个点,那不需要显示了
{
if(c ==' ')
{
if(k!=0)
{
if(flag)
{
printf("%d",k);
flag=0; //第一个单词打印完后,后面就可以以 %d的形式来让末尾没有空格打印
}
else
{
printf(" %d",k);
}
k=0;
}
}
else
{ k++; }
scanf("%c",&c);
}
if(k!=0) //如果最后一个单词是空格不用打印
{
if(flag) //负责防止首尾有多余空格
{
printf("%d",k);
}
else
{
printf(" %d",k);
}
}
}
162、表格输出 (5 分)
本题要求编写程序,按照规定格式输出表格。
输入格式:
本题目没有输入。
输出格式:
要求严格按照给出的格式输出下列表格:
Province Area(km2) Pop.(10K)
Anhui 139600.00 6461.00
Beijing 16410.54 1180.70
Chongqing 82400.00 3144.23
Shanghai 6340.50 1360.26
Zhejiang 101800.00 4894.00
#include<stdio.h>
int main()
{
printf("------------------------------------\\n");
printf("Province Area(km2) Pop.(10K)\\n");
printf("------------------------------------\\n");
printf("Anhui 139600.00 6461.00\\n");
printf("Beijing 16410.54 1180.70\\n");
printf("Chongqing 82400.00 3144.23\\n");
printf("Shanghai 6340.50 1360.26\\n");
printf("Zhejiang 101800.00 4894.00\\n");
printf("------------------------------------\\n");
}
163、装箱问题 (20 分)
输入格式:
输入第一行给出物品个数N(≤1000);第二行给出N个正整数s
i
(1≤s
i
≤100,表示第i项物品的大小)。
输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。
输入样例:
8
60 70 80 90 30 40 10 20
输出样例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5
#include<stdio.h>
#include<string.h>
struct Love{
int xiang;
int ji;
}love[1001];
int main()
{
int b[1000]={100};
int max=0;
int i,j;
int first;
int n;
int num=0;
int k=0;
int a[100],one=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&love[i].xiang);
}
for(i=0;i<n;i++)
b[i]=100;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(love[i].xiang<=b[j])
{
love[i].ji = j;
b[j]-=love[i].xiang;
if(max<j)
max=j;
break;
}
}
}
for(i=0;i<n;i++)
{
printf("%d %d\\n",love[i].xiang,love[i].ji+1);
}
printf("%d\\n",max+1);
}
164、求交错序列前N项和 (15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
作者: 陈建海
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
#include<stdio.h>
int main()
{
int n;
int i;
int zi = 1,mu = 1;
int flag=1;
double sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
sum+=zi*1.0/mu*flag;
flag=-flag;
zi+=1;
mu+=2;
}
printf("%.3lf\\n",sum);
}
165、求集合数据的均方差 (15 分)
输入格式:
输入首先在第一行给出一个正整数 N(≤10
4
),随后一行给出 N 个正整数。所有数字都不超过 1000,同行数字以空格分隔。
输出格式:
输出这N个数的均方差,要求固定精度输出小数点后5位。
输入样例 1:
10
6 3 7 1 4 8 2 9 11 5
输出样例 1:
3.03974
输入样例 2:
1
2
输出样例 2:
0.00000
#include<stdio.h>
#include<math.h>
int main()
{
int n;
int i,j;
double x=0;
int a[10005];
double result;
int sum=0;
double avg;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
//printf("1");
}
avg = sum*1.0/n;
for(i=0;i<n;i++)
{
x += (a[i]-avg)*(a[i]-avg);
//printf("2");
}
result = sqrt(x/n);
printf("%.5lf\\n",result);
}
166、币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
这道题我没写对,没拿到满分,好像15分吧,我想纪念一下自己的代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int num;
int i,j,n,xing=0;
char s[100];
char str1[100],a=-1;
int k=0; //计算位数
int flag=1;
gets(s);
int len = strlen(s);
for(i=0;i<len;i++)
{
num = s[i]-'0';
if(num!=0)
{
xing++;
flag=0;
}
if(i==len-1 && num!=0)
flag=1;
}
for(i=0;s[i]!='\\0';i++)
{
num = s[i]-'0';
if(s[i]+=2)
switch(num)
{
case 0:str1[++a]='a';break;
case 1:str1[++a]='b';break;
case 2:str1[++a]='c';break;
case 3:str1[++a]='d';break;
case 4:str1[++a]='e';break;
case 5:str1[++a]='f';break;
case 6:str1[++a]='g';break;
case 7:str1[++a]='h';break;
case 8:str1[++a]='i';break;
case 9:str1[++a]='j';break;
}
a++;
k++;
}
/*for(i=0;i<k;i++)
printf("%c",str1[i]);*/ //调试
n=0;
for(i=k*2-1;i>=0;)
{
if(n==1 || n==5)
{
str1[i]='S';
}
else if(n==2 || n==6)
{
str1[i]='B';
}
else if(n==3 || n==7)
{
str1[i]='Q';
}
else if(n==4)
{
str1[i]='W';
}
else
{
str1[i]='Y';
}
n++;
i-=2;
}
if(flag)
for(i=0;i<k+k-1;i++)
printf("%c",str1[i]);
else
for(i=0;i<k+k-1-xing*2+1;i++)
printf("%c",str1[i]);
}
167、求矩阵的局部极大值 (15 分)
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。
输入格式:
输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。
输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。
输入样例1:
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1
输出样例1:
9 2 3
5 3 2
5 3 4
输入样例2:
3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1
输出样例2:
None 3 5
#include<stdio.h>
struct Love{
int hang;
int lie;
int max;
}Max[200];
int main()
{
int m,n;
int i,j;
int a[300][300];
//int max[20],k=0;
int k=0;
int flag=0;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
if(i==0)
continue;
if(i==m-1)
break;
for(j=0;j<n;j++)
{
if(j==0||j==n-1)
continue;
if(a[i][j]>a[i-1][j] && a[i][j]>a[i+1][j] && a[i][j]>a[i][j+1] && a[i][j]>a[i][j-1])
{
Max[k].max=a[i][j];
Max[k].hang=i+1;
Max[k].lie=j+1;
k++;
flag=1;
}
}
}
if(flag!=0)
{
for(i=0;i<k;i++)
{
printf("%d %d %d\\n",Max[i].max,Max[i].hang,Max[i].lie);
}
}
else
{
printf("None %d %d\\n",m,n);
}
}
168、查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入格式:
输入在一行中给出用户连续输入的若干个编号。
输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
输入样例1:
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00
输入样例2:
1 2 3 3 4 4 5 6 7 8
输出样例2:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price = 2.50
price = 4.10
price = 4.10
price = 10.20
#include<stdio.h>
int main()
{
int i,j;
int n;
int x;
printf("[1] apple\\n");
printf("[2] pear\\n");
printf("[3] orange\\n");
printf("[4] grape\\n");
printf("[0] exit\\n");
for(i=0;i<5;i++)
{
scanf("%d",&x);
if(x==0)
break;
if(x<0 || x>4)
printf("price = 0.00\\n");
if(x==1)
printf("price = 3.00\\n");
else if(x==2)
printf("price = 2.50\\n");
else if(x==3)
printf("price = 4.10\\n");
else if(x==4)
printf("price = 10.20\\n");
}
}
169、混合类型数据格式化输入 (5 分)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、
以上是关于PTA 程序设计天梯赛(161~180题)的主要内容,如果未能解决你的问题,请参考以下文章