PTA C语言实训(周二)

2023-12-18 04:30
文章标签 语言 实训 pta 周二

本文主要是介绍PTA C语言实训(周二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.判断一个三位数是否是水仙花数 (46 分)
    • 2. 暴躁的牛1 (20 分)
    • 3.超市购物打折 (15 分)
    • 4.大白菜打折 (40 分)
    • 5.运动会2 (50 分)
    • 6.第几天 (100 分)
    • 7.整数的分类处理 (20 分)
    • 8.你出题计算机来答 (100 分)
    • 9.求前n项斐波那契数列之和 (40 分)
    • 10.小明走格子 (10 分)
    • 11.全排列 (30 分)
    • 12. 旋转矩阵 (20 分)
    • 13.连续和问题 (50 分)
    • 14.打擂法找最大的数 (10 分)
    • 15.扑克游戏1 (10 分)
    • 16.输出m到n之间的全部素数 (20 分)
    • 17.孪生素数 (100 分)

1.判断一个三位数是否是水仙花数 (46 分)

输入一个整数,判断它是不是水仙花数,水仙花数是一个三位整数,其每位数字的立方和等于其本身,

例如,153是一个水仙花数,153=1×1×1+5×5×5+3×3×3

输入格式:
输入一个整数,代表判断的数字

输出格式:
如果该数是水仙花数,则输出:yes

如果该数不是水仙花数,则输出:no

如果该数不是一个三位数,输出:error

输入样例1:
153
输出样例1:
yes
输入样例2:
258
输出样例2:
no
输入样例3:
15
输出样例3:
error

#include<stdio.h>
int main(){int n;scanf("%d",&n);if(n>=100&&n<=999){int a,b,c;a=n/100;b=n%100/10;c=n%10;if(a*a*a+b*b*b+c*c*c==n){printf("yes\n");}else{printf("no\n");}}else{printf("error\n");}
}

2. 暴躁的牛1 (20 分)

Bear_2在青青草原上养了超级多的牛,这些牛分为两种,一种是脾气暴躁的牛,另一种则是脾气温顺的牛,有一天Bear_2想从自己养的牛中选出n只牛来排成一列,由于连续两只暴躁的牛相邻会发生不好的事,因此连续两只暴躁的牛不能相邻,假设Bear_2养的牛有无限多,他现在想问你一共可以构成多少种合法的序列,答案对1000000007取模。

输入格式:
输入一个正整数n(1<=n<=1000)。

输出格式:
输出一个正整数。(数据范围很大,请用long long型变量)

输入样例:
1
输出样例:
2
输入样例:
2
输出样例:
3

#include<stdio.h>
int main(){int n,i;long long num1,num2,sum;num1=2;num2=3;scanf("%d",&n);if(n==1){printf("2");}if(n==2){printf("3");}for(i = 3; i<=n; i++){sum=(num1+num2)%1000000007;num1=num2;num2=sum;}printf("%ld",sum);
}

3.超市购物打折 (15 分)

某超市促销规定:购物不超过50元按原价付款;超过50元不超过150元,超过部分按九折付款;超过150元的,超过部分按八折付款。编程序完成超市的计费打折。

输入格式:
输入一个实数即货物的原价。

输出格式:
输出打折后的价格,保留两位小数。

输入样例:
在这里给出一组输入。例如:

105
输出样例:
在这里给出相应的输出。例如:

99.50
输入样例2:
在这里给出一组输入。例如:

210
输出样例2:
在这里给出相应的输出。例如:

188.00

#include<stdio.h>
int main(){double n,m;scanf("%lf",&n);if(n>0&&n<=50){printf("%.2lf\n",n);}else if(n>50&&n<=150){printf("%.2lf\n",50+(n-50)*0.9);}else{printf("%.2lf\n",50+100*0.9+(n-150)*0.8);}
}

4.大白菜打折 (40 分)

任务描述:
某超市内大白菜打折促销,单次购买5公斤以下每公斤1.8元;5公斤以上(包括5公斤,下同)每公斤1.6元;10公斤以上每公斤1.4元;20公斤以上每公斤1.0元。编程输入购买大白菜的公斤数,输出应付的钱数。

输入格式:
一个浮点数,绝对值不超过10000。

输出格式:
一个浮点数,表示应付的钱数,输出结果保留2位小数。

输入样例:
12.6
输出样例:
17.64

#include<stdio.h>
int main(){double n,m;scanf("%lf",&n);if(n>0&&n<5){printf("%.2lf\n",n*1.8);}else if(n>=5&&n<10){printf("%.2lf\n",n*1.6);}else if(n>=10&&n<20){printf("%.2lf\n",n*1.4);}else{printf("%.2lf\n",n*1.0);}	
}

5.运动会2 (50 分)

任务描述
于龙在运动会上和4位同学进行跳绳比赛,需要一个排名程序,先输入每位同学的成绩(跳绳计数),再输出每位同学的成绩及排名(成绩从高到低排列)。
输入格式:
五个空格分隔的整数,代表5个人的成绩。
输出格式:
按行输出名次与成绩,之间用一个横线分隔,横线前后各一个空格,横线就是减号。
特别的,本题的输出要求相同成绩数据只输出1次。

输入样例:
150 120 180 135 100
输出样例:
1 - 180
2 - 150
3 - 135
4 - 120
5 - 100

输入样例:
180 120 120 180 120
输出样例:
1 - 180
3 - 120

输入样例:
1 2 3 2 1
输出样例:
1 - 3
2 - 2
4 - 1

#include<stdio.h>
int main(){int str[10];for(int i=0;i<5;i++){scanf("%d",&str[i]);}int t;for(int j=0;j<5;j++){for(int i=0;i<5-j;i++){if(str[i]<str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}else{continue;}}}for(int i=0;i<5;i++){if(str[i]==str[i-1]){continue;}else{printf("%d - %d\n",i+1,str[i]);	}
}
}

6.第几天 (100 分)

编程输入年、月、日三个整数(保证是合法日期),输出这一天是这一年的第几天。

输入样例:
2015 10 31
输出样例:
304

输入样例:
2060 12 31
输出样例:
366

#include<stdio.h>
int main(){int y,m,d;scanf("%d %d %d",&y,&m,&d);int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(y%400==0||y%4==0&&y%100!=0){a[1]+=1;}int sum=0;for(int i=0;i<m-1;i++){sum+=a[i];}printf("%d",sum+d);
}

7.整数的分类处理 (20 分)

给定 N 个正整数,要求你从中得到下列三种计算结果:

A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。

输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5

输入样例 2:
8
15 18 7 6 9 1 3 10
输出样例 2:
18 3 NONE

# include<stdio.h>
int main()
{int n,i,t,max=0,sum=0,a2=0,a3=0;scanf("%d",&n);int a[n];for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){if(a[i]%3==0&&a[i]>max)max=a[i];if((a[i]-1)%3==0)a2++;if((a[i]-2)%3==0){a3++;sum+=a[i];}	}if(max==0){printf("NONE ");
}else printf("%d ",max);if(a2==0){printf("NONE ");
}else printf("%d ",a2);if(sum==0){printf("NONE");
}else printf("%.1lf",sum*1.0/a3);return 0;
}

8.你出题计算机来答 (100 分)

输入一个形如A+B的四则运算式(加、减、乘、除),代表你向计算机出的题目。让计算机输出运算结果,请按样例格式输出。如果除数为0,输出非法操作信息:Illegal operation

输入样例:
56+23
输出样例:
56+23=79

输入样例:
123
输出样例:
12
3=36

输入样例:
12/0
输出样例:
Illegal operation

输入样例:
-5*-5
输出样例(简单输出就行负数不需特殊处理):
-5*-5=25

#include<stdio.h>
int main(){int a,b;char m;scanf("%d%c%d",&a,&m,&b);if(m=='+'){printf("%d+%d=%d\n",a,b,a+b);}else if(m=='-'){printf("%d-%d=%d\n",a,b,a-b);}else if(m=='*'){printf("%d*%d=%d",a,b,a*b);}else{if(b==0){printf("Illegal operation\n");}else{printf("%d/%d=%d\n",a,b,a/b);}}
}

9.求前n项斐波那契数列之和 (40 分)

功能:用函数求fibonacci数列前n项的和。 说明:fibonacci数列为数列的第一项值为1,第二项值也 为1,从第三项开始,每一项均为其前面相邻两项 的和。

注意:结果值控制在long类型范围内。

输入格式:
输入一个整数n,3<=n<=40。

输出格式:
输出前n项斐波那契数列之和

输入样例:
28
输出样例:
832039

#include<stdio.h>
int main(){long int sum=0;int n,a[40];scanf("%d",&n);a[0]=1,a[1]=1;for(int i=2;i<n;i++){a[i]=a[i-1]+a[i-2];}for(int i=0;i<n;i++){sum+=a[i];}printf("%ld\n",sum);
}

10.小明走格子 (10 分)

从A点到B点有n个格子,小明现在要从A点到B点,小明吃了些东西,补充了一下体力,他可以一步迈一个格子,也可以一步迈两个格子,也可以一步迈3个格子,也可以一步迈4个格子。请编写程序计算小明从A点到B点一共有多少种走法。
在这里插入图片描述

输入格式:
输入包含多组数据,第一行为一个整数m,m不超过10000,表示输入数据组数。接下来m行,每行为一个整数n(保证对应的输出结果小于2
​31),表示从A点到B点的格子数。

输出格式:
输出为m个整数,表示对于每组数据小明从A点到B点的走法数。

输入样例:
2
5
3
输出样例:
15
4

#include<stdio.h>
int main(){int n;scanf("%d",&n);int a[10000];int b[100]; int i,j;for(i=0;i<n;i++){scanf("%d",&a[i]); } for(j=0;j<n;j++){for(i=1;i<=a[j];i++){if(i==1){b[i]=1;}else if(i==2) b[i]=2;else if(i==3) b[i]=4;else if(i==4) b[i]=8;else{b[i]=b[i-1]+b[i-2]+b[i-3]+b[i-4];}}printf("%d\n",b[a[j]]);}}

11.全排列 (30 分)

Lc今天上课学会了数的全排列并且Lc觉得数的全排列很简单,但是直到Lc的同桌YooQ向他提出了一个问题,该问题的描述如下:我们知道n的全排列总共有n!个序列,例如2的全排列有两个序列{1,2}和{2,1},现在你要解决的问题是n的全排列的n!个序列中第m个序列是什么?(注意:n的全排列的n!个序列是按字典序由小到大排序的)

输入格式:
第一行为样例组数t(t≤1e5),接下来t行每行有一个整数n和m(1<=n<=20,1<=m<=n!)

输出格式:
输出t行,每行输出n的全排列的n!个序列中第m个序列,两相邻的数间有一空格,行末不得有多余空格。

输入样例:
在这里给出一组输入。例如:

2
1 1
3 6
输出样例:
在这里给出相应的输出。例如:

1
3 2 1

12. 旋转矩阵 (20 分)

一个 n∗n 的矩阵。

你需要把矩阵按顺时针旋转 90° ,一共旋转 m 次。

请输出旋转 m 次之后的 n∗n 的矩阵。

输入格式:
多组输入。

对于每组输入,

输入一个整数 n 和一个正整数 m 。

当输入的 n=0 时表示输入结束。

接下来 n 行,每行 n 个正整数。

输出格式:
对于每组输入,

请输出一共 n 行,

每行 n 个正整数,每个数字之间以一个空格隔开,行末不加空格。

表示旋转后的矩阵。

输入样例:
3 1
1 2 3
4 5 6
7 8 9
2 2
1 2
3 4
0
输出样例:
7 4 1
8 5 2
9 6 3
4 3
2 1
提示说明
对于矩阵里的每个数 num , 1<=num<=1000

0<=n<=100,1<=m<=1e9

13.连续和问题 (50 分)

问题描述
给你一段连续的整数,你能求出它们的和吗?

输入格式:
一行中给出两个整数A和B(A<=B且绝对值不超过10000)。

输出格式:
一个整数,即从A到B的所有连续整数的和(包括A和B)。

输入样例:
1 10
输出样例:
55

输入样例:
-10 10
输出样例:
0

#include<stdio.h>
int main(){int a,b;scanf("%d %d",&a,&b);int sum=0;for(int i=a;i<=b;i++){sum+=i;}printf("%d\n",sum);
}

14.打擂法找最大的数 (10 分)

输入10个数,输出其中最大的数。

输入格式:
在一行中给出10个整数,空格分隔。

输出格式:
输出最大的数

输入样例:
在这里给出一组输入。例如:

21 32 5 8 16 44 8 30 11 19
输出样例:
在这里给出相应的输出。例如:

44

#include<stdio.h>
int main(){int a[10];for(int i=0;i<10;i++){scanf("%d",&a[i]);}int max=a[0];for(int i=1;i<10;i++){if(max<a[i]){max=a[i];}}printf("%d",max);
} 

15.扑克游戏1 (10 分)

任务描述
老师给X同学留了一个任务:扑克游戏中的牌型判断。
输入格式:
输入的第一行,是一个整数N,表示有N组数据。
接下来的N行是N组数据,每一行数据有3张扑克牌,
例如:5S 6H 12C,其中数字表示点数(2-10分别代表2点到10点的牌,14代表A,11、12、13代表J、Q、K),
字母表示花色的第一个字符,黑桃(Spade)、红桃(Heart)、梅花(Club)、方块(Diamond)。
以上3张牌为黑桃5、红桃6、方块Q。
输出格式:
输出N行,每一行输出一个单词,表示一组数据三张牌的最大牌型,空格后再输出此牌型的(最大)点数。
所有牌型从大到小排列如下(豹子>同花顺>顺子>同花>对子>花牌):
(1)豹子(Leopard):三张牌点数一样,如5S 5H 5C。
(2)同花顺(Flush straight):三张牌同花色且点数恰好相邻,如5S 6S 7S。
(3)顺子(Straight):三张牌点数恰好相邻,但不同花色,如10H 11D 12C。
(4)同花(Same kind):三张牌花色相同,点数不全相同,如8H 5H 11H。
(5)对子(Pair):花色不全相同,两张牌点数相同,如11H 5C 11D。
(6)花牌(General):花色不全相同,点数全不相同,如:5D 6C 8H。

输入样例:
6
8H 8D 8C
5S 7S 6S
11C 12D 10S
1C 5C 6C
10C 8D 8H
5D 6H 12C

输出样例:
Leopard 8
Flush straight 7
Straight Q
Same kind 6
Pair 8
General Q

16.输出m到n之间的全部素数 (20 分)

本题要求输出给定整数M和N区间内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:
输出素数,每个数占6位,每行输出10个。如果最后一行输出的素数个数不到10个,也需要换行。

若输入的范围不合法,则输出"Invalid."。

输入样例1:
2 100
输出样例1:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97

输入样例2:
6 2
输出样例2:
Invalid.

#include<stdio.h>
int main(){int m,n;int num=0;int i,j;scanf("%d %d",&m,&n);if(m>=1&&m<=500&&n>=1&&n<=500&&m<=n){for(i=m;i<=n;i++){for(j=2;j<=i;j++){if(i%j==0){break;}}if(j==i){printf("%6d",i);num++;if(num%10==0){printf("\n");}}}}else{printf("Invalid.\n");}
} 

17.孪生素数 (100 分)

编程输入正整数a(10000>=a>=2),输出不小于a的第一对孪生素数。差是2的两个素数被称为孪生素数。

输入样例:
10000
输出样例:
10007 10009

输入样例:
3
输出样例:
3 5

#include<stdio.h>
int main(){int a,i,j,k;int s;scanf("%d",&a);for(i=a;;i++){for(j=2;j<=i;j++){if(i%j==0){break;}}if(j==i){s=i+2;}for(k=2;k<=s;k++){if(s%k==0){break;}}if(s==k){printf("%d %d\n",i,s);break;}} 
} 

这篇关于PTA C语言实训(周二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507036

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上