PTA 程序设计天梯赛(1~20题)

制作不易,喜欢请点个赞,我是王睿,很高兴认识大家!

1、Hello World (5 分)

这道超级简单的题目没有任何输入。

你只需要在一行中输出著名短句“Hello World!”就可以了。

输入样例:

输出样例:
Hello World!

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

2、打印沙漏 (20 分)

L1-002 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
输出样例:





2

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		int i,j,k;		//用于循环
		int n;			//有几个正整数
		int b=1;		//表示一行的最大个数		
		int h=1;		//计算行数
		int sum=1;		//至少会打印1个星
		int g=0;		//决定打印空格的元素
		int index;		//记住下半行的打印星数
		String Str;		//符号
		char c;
		Scanner dx = new Scanner(System.in);
		n = dx.nextInt();
		Str = dx.nextLine();	//先输入一个字符串
		c = Str.charAt(1);		//再利用字符串转为字符方法得到字符
		if(n<7) {
			System.out.println(c);
			System.out.println(n-1);
			System.exit(0);		//请求终止JVM
		}
		else {
			while(sum<=n) {
				b = b+2;
				sum = sum + b*2;
				h++;
			}
		}
		h=h-1;		//因为K初始值为1,所以会多算出一行,要减去1才是真实的上半部分与下半部分的行数
		index = h;	//保护下半行行数
		sum = sum - 2*b;	//减去上下两边的最大行数,即为多算的个数
		sum = n -sum;
		for(i=h;i>=1;i--)		//打印上半部分【包括中间的符号】
		{
			for(j=1;j<=g;j++)
				System.out.print(" ");
			for(k=1;k<=2*i-1;k++)
				System.out.print(c);
			System.out.println();
			g++;
		}
		for(i=2;i<=index;i++){
			for(j=1;j<=(g-2);j++){
				System.out.print(" ");
			}
			for(k=1;k<=2*i-1;k++){
				System.out.print(c);
			}
			System.out.println();
			g--;
		}
		System.out.println(sum);
	}
}

3、个位数统计 (15 分)

L1-003 个位数统计 (15 分)
给定一个 k 位整数 N=d
​k−1
​​ 10
​k−1
​​ +⋯+d
​1
​​ 10
​1
​​ +d
​0
​​ (0≤d
​i
​​ ≤9, i=0,⋯,k−1, d
​k−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

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		int shu[] = new int[10];
		Scanner sc = new Scanner(System.in);
		String a = sc.nextLine();
		int len = a.length();
		for(int i = 0 ; i < len ; i++) {
			shu[a.charAt(i)-48]++;
		}
		for(int i = 0 ; i < 10 ; i++) {
			if(shu[i]!=0)
				System.out.println(i+":"+shu[i]);
		}
		
	}

}

4、计算摄氏温度 (5 分)

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出一个华氏温度。

输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

输入样例:
150
输出样例:
Celsius = 65

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
			Scanner scanner = new Scanner(System.in);
			int f = scanner.nextInt();
			System.out.println("Celsius = " + (5*(f-32)/9));
		}
}

5、考试座位号 (15 分)

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Main{
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(br.readLine());
		HashMap map = new HashMap();
		while(--n>=0){
			String s=br.readLine();
			String s2[]=s.split(" ");
			map.put(s2[1],s2[0]+" "+s2[2]);
		}
		int m=Integer.parseInt(br.readLine());
		String s3[]=br.readLine().split(" ");
		int j=0;
		while(--m>=0){
			System.out.println(map.get(s3[j]));
			j++;
		}
	}
}

6、连续因子 (20 分)

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:
输入在一行中给出一个正整数 N(1<N<2
​31
​​ )。

输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:
630
输出样例:
3
567

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		long n=s.nextInt();
		long start=0,len=0;
		long sum=0;
		for(int i=2;i<Math.sqrt(n);i++) {
			sum=1;
			for(int j=i;sum*i<=n;j++) {
				sum*=j;
				if(n%sum==0&&j-i+1>len) {
					start=i;
					len=j-i+1;
				}
			}
		}
		if(start==0) {
			start=n;
			len=1;
		}
		System.out.println(len);
		for(int i=0;i<len-1;i++) {
			System.out.print(start+i+"*");
		}
		System.out.print(start+len-1);
	}
}

7、A-B (20 分)

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过10
​4
​​ ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:
在一行中打印出A−B的结果字符串。

输入样例:
I love GPLT! It’s a fun game!
aeiou
输出样例:
I lv GPLT! It’s fn gm!

#include<stdio.h>
#include<string.h>
int main()
{
	int i=0,j=0;			//用于循环和数组下标
	char str1[10010];		//用来存储A、B两个字符串
	char str2[10010];		//用来存储要删除的字符串字母
	int length;				//用来存储字符串长度
	gets(str1);
	gets(str2);
	length = strlen(str2);	//这里只需要记住str2字符串的长度即可
	while(str1[i]!='\0')	//将str1字符串从第一个字母开始带进去一一查验
	{
		for(j=0;j<length;j++)//将这个字母放到str2中一一查询是否有对应的,若有对应的
		{					//那么for循环就会提前跳出,并且j的值不可能会等于length,
			if(str1[i]==str2[j])//记住关键词,提前!所以从这里就可以肯定若for循环执行
				break;			//到了最后,那么证明这个字母在str2中是找不到对应的,
		}						//那么自然需要显示啦!
		if(j==length)
			printf("%c",str1[i]);
		i++;
	}
	printf("\n");
	return 0;
}
	

8、计算指数 (5 分)

真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2
​n
​​ 。不难吧?

输入格式:
输入在一行中给出一个不超过 10 的正整数 n。

输出格式:
在一行中按照格式 2^n = 计算结果 输出 2
​n
​​ 的值。

输入样例:
5
输出样例:
2^5 = 32
作者: 陈越
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB

#include<stdio.h>
#include<math.h>
int main()
{
	int n;
	int result;
	scanf("%d",&n);
	if(n<1 || n>10)		return 0;
	result=pow(2,n);
	printf("2^%d = %d\n",n,result);
	return 0;
}

9、 计算阶乘和 (10 分)

对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。

输入格式:
输入在一行中给出一个不超过10的正整数N。

输出格式:
在一行中输出S的值。

输入样例:
3
输出样例:
9
作者: 陈越
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB

#include<stdio.h>
int main()
{
	int N;
	int i;	//用于循环
	int sum=0,mix=1;	//求和
	scanf("%d",&N);
	if(N<1 || N>10)		return 0;
	for(i=1;i<=N;i++)
	{
		mix=i*mix;
		sum=sum+mix;
	}
	printf("%d\n",sum);
	return 0;
}

10、 简单题 (5 分)

这次真的没骗你 —— 这道超级简单的题目没有任何输入。

你只需要在一行中输出事实:This is a simple problem. 就可以了。

输入样例:

输出样例:
This is a simple problem.

#include<stdio.h>
int main()
{
	printf("This is a simple problem.\n");
	return 0;
}

11、 跟奥巴马一起画方块 (15 分)

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。

输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

#include<stdio.h>
int main()
{
	int N;
	char c;
	int i,j;
	scanf("%d %c",&N,&c);
	if(N%2==0){
		for(i=0;i<N/2;i++){
			for(j=0;j<N;j++){
				printf("%c",c);
			}
				printf("\n");
		}
	}else{
		for(i=0;i<N/2+1;i++){		//因为不管怎么除小数点都是0.5所以加1
			for(j=0;j<N;j++){
				printf("%c",c);
			}
			printf("\n");
		}
	}
	return 0;
}

12、查验身份证 (15 分)

L1-016 查验身份证 (15 分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
输出样例1:
12010X198901011234
110108196711301866
37070419881216001X
输入样例2:
2
320124198808240056
110108196711301862
输出样例2:
All passed

#include <stdio.h>  
#include <stdlib.h>  
   
int charToInt(char c)
{  
     return (int)(c-'0');  
 }  
 int main(int argc, char *argv[]) 
 {  
     int n,i,j,k=0,s,  
     a[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  
     char cur,b[11]={'1','0','X','9','8','7','6','5','4','3','2'},  
     c[20];  
     scanf("%d",&n);  
     for(i = 0; i < n;i++)
	 {  
         s=0;  
         scanf("%s",&c);  
         for(j= 0;j<17;j++)
		 {  
             if(c[j]>='0'&&c[j]<='9')
			 {  
                 s+=charToInt(c[j])*a[j];  
			 }
			 else
			 {  
                 printf("%s",c);  
                 if(i<n-1)
				 {  
                     printf("\n");  
                 }  
                 s=-1;  
                 break;  
             }     
         }  
         if(b[s%11]==c[j]&&s!=-1)
		 {  
             k++;  
         }
		 else if(b[s%11]!=c[j]&&s!=-1)
		 {  
             printf("%s",c);  
             if(i<n-1)
			 {  
                 printf("\n");  
			 }  
         }  
     }  
     if(k==n)
	 {  
         printf("All passed");  
     }  
     return 0;  
}  

13、 到底有多二 (15 分)

L1-017 到底有多二 (15 分)
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:
输入第一行给出一个不超过50位的整数N。

输出格式:
在一行中输出N犯二的程度,保留小数点后两位。

输入样例:
-13142223336
输出样例:
81.82%
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!

#include<stdio.h>
#include<string.h>
int main()
{
	char N[50];
	int i;
	float count=0,sum=0; 
	scanf("%s",&N);
	int x=strlen(N);		//计算字符串长度
	for(i=0;i<x;i++){		//计算有多少个二
		if(N[i]=='2')
			count++;		
	}
	if(N[0]=='-'){				//负数
			sum=(count/(x-1))*1.5*100;
	}else{						//正数
		sum=count/x*100;
	}
		if(N[x-1]%2==0)			//偶数
			sum*=2;
	printf("%.2f%%",sum);
	return 0;
}

14、大笨钟 (10 分)

L1-018 大笨钟 (10 分)
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。

下面就请你写个程序,根据当前时间替大笨钟敲钟。

输入格式:
输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。

输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

Only hh:mm. Too early to Dang.
其中hh:mm是输入的时间。

输入样例1:
19:05
输出样例1:
DangDangDangDangDangDangDangDang
输入样例2:
07:05
输出样例2:
Only 07:05. Too early to Dang.

#include<stdio.h>
main()
{
	int m, n,h,i,k;
	scanf("%d:%d", &m, &n);
	if (m >= 13 && m < 24)
	{
		h = m - 12;
		if (n != 0)
			k = h + 1;
		else if (n == 0)
			k = h;

		for (i = 0; i < k; i++)
		{
			printf("Dang");
		}
	}
	else
		printf("Only %02d:%02d.  Too early to Dang.",m,n);
}

15、 谁先倒 (15 分)

L1-019 谁先倒 (15 分)
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。

输入格式:
输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为:

甲喊 甲划 乙喊 乙划
其中喊是喊出的数字,划是划出的数字,均为不超过100的正整数(两只手一起划)。

输出格式:
在第一行中输出先倒下的那个人:A代表甲,B代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。

输入样例:
1 1
6
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
15 1 1 16
输出样例:
A
1

#include<stdio.h>
int main()

{

	int N,A,B;		//A,B酒量

	int i;

	int countA=0,countB=0;

	int Ahan[100],Ahua[100],Bhan[101],Bhua[100];

	scanf("%d%d",&A,&B);

	scanf("%d",&N);

	for(i=0;i<N;i++)

		scanf("%d%d%d%d",&Ahan[i],&Ahua[i],&Bhan[i],&Bhua[i]);

	for(i=0;i<N;i++){

			if((Ahua[i]==(Ahan[i]+Bhan[i]))&&(Bhua[i]==(Bhan[i]+Bhan[i])))

				continue;

		if(Ahua[i]==(Ahan[i]+Bhan[i])){

			countA++;				//杯数加1

			A--;					//酒量减少

			if(A<0){

				printf("A\n%d\n",countB);		//count输出没倒那个

				break;

			}

		}

		else
 
			if(Bhua[i]==(Ahan[i]+Bhan[i])){

				countB++;

				B--;

				if(B<0){

					printf("B\n%d\n",countA);

					break;

				}

			}

	}

	return 0;

}

16、 帅到没朋友 (20 分)

L1-020 帅到没朋友 (20 分)
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。

输入格式:
输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(≤10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。

注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。

输出格式:
按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出No one is handsome。

注意:同一个人可以被查询多次,但只输出一次。

输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111
输出样例2:
No one is handsome

#include <stdio.h>
#include <string.h>
int love[100010];		//存储ID号空间
int main()
{
	int n;			//有几个朋友圈
	int k;			//每个朋友圈中有几个人
	int m;			//待查询人数
	int id;			//id号码
	int newid;		//待查询的id号码
	int i,j;		//用于循环和数组下标
	int flag=0;		//用来判断输出结果是否是因为太帅没有朋友
	scanf("%d",&n);
	    
        for(i=0;i<n;i++)			
		{							
            scanf("%d",&k);
            for(j=0;j<k;j++)
			{
                scanf("%d",&id);
                if(k == 1)break;//只有自己的朋友圈排出
                love[id] = 1;   //每个人ID肯定都是不同的,所以让朋友圈中已知的都值为1
            }
        }
        scanf("%d",&m);
        for(i=0;i<m;i++)
		{
            scanf("%d",&newid);
            if(!love[newid])//这里要注意判断条件为非真为假,非假为真的特性,已存在时
            {               //就无需在输出,利用这一特点,我们只要把事先没有存在的输出即可
                if(++flag > 1) printf(" ");
                printf("%05d",newid);
                love[newid] = 1;
            }
        }
        if(flag == 0) printf("No one is handsome");
        printf("\n");
    return 0;
}

17、 重要的话说三遍 (5 分)

L1-021 重要的话说三遍 (5 分)
这道超级简单的题目没有任何输入。

你只需要把这句很重要的话 —— “I’m gonna WIN!”——连续输出三遍就可以了。

注意每遍占一行,除了每行的回车不能有任何多余字符。

输入样例:

输出样例:
I’m gonna WIN!
I’m gonna WIN!
I’m gonna WIN!

#include <stdio.h>
void f()
{
	printf("I'm gonna WIN!\n");
}
int main()
{
	f();
	f();
	f();
	return 0;
}

18、 奇偶分家 (10 分)

L1-022 奇偶分家 (10 分)
给定N个正整数,请统计奇数和偶数各有多少个?

输入格式:
输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。

输出格式:
在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。

输入样例:
9
88 74 101 26 15 0 34 22 77
输出样例:
3 6

#include <stdio.h>
int main()
{
	int N;				//要输入多少个数
	int i;				//用于循环
	int a[1000];		//给定最大数组空间存储输入数据,以防下标越界
	int num1=0,num2=0;	//用于计算奇\偶个数
	scanf("%d",&N);
	if(N<=0 || N>1000) return 0;	//大于0的自然数为正整数
	for(i=0;i<N;i++)
		scanf("%d",&a[i]);
	for(i=0;i<N;i++)
	{
		if(a[i]%2!=0)
			num1++;
		else
			num2++;
	}
	printf("%d %d\n",num1,num2);
	return 0;
}

19、 输出GPLT (20 分)

L1-023 输出GPLT (20 分)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL

#include<stdio.h>
#include<string.h>
int main()
{
	char str[10010];			//储存输入的字符串内存空间
	int g=0,p=0,l=0,t=0;		//这四个变量分别用来计算字符串中出现的次数
	int i,j;					//用于循环和数组下标
	int n;						//得到所输入的字符串长度
	gets(str);					//提供输入功能
	n = strlen(str);			//得到str字符串的长度并赋值给n
	for(i=0;i<n;i++)			//从第一个字母开始一一寻找有没有g,G,t,T,l,L,p,P这些字母
	{							//若存在,则会在for循环都算好其出现的次数,因为每对应依次都会+1
		if(str[i]=='g' || str[i]=='G')
			g++;
		else if(str[i]=='p' || str[i]=='P')
			p++;
		else if(str[i]=='l' || str[i]=='L')
			l++;
		else if(str[i]=='t' || str[i]=='T')
			t++;
	}
	while(n)					//然后之后就是输出环节,每对应一个字母就将其输出,并减1
	{							//直到它们都恢复为了初始值0时,无需打印,则赋n=0,判断为假结束循环
		if(g!=0)
		{	printf("G");	g--;	}
		if(p!=0)
		{	printf("P");	p--;	}
		if(l!=0)
		{	printf("L");	l--;	}
		if(t!=0)
		{	printf("T");	t--;	}
		if(g==0 && p==0 && l==0 && t==0)
			n=0;
	}
	printf("\n");
	return 0;
}

20、 后天 (5 分)

L1-024 后天 (5 分)
如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式:
输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式:
在一行中输出D天的后天是星期几。

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

#include<stdio.h>
int main()
{
	int d;	//输入
	scanf("%d",&d);
	if(d<1 || d>7)	return 0;
	if(d<=5)
		printf("%d",d+2);
	else
		printf("%d",d-7+2);
	return 0;
}

制作不易,喜欢请点个赞,我是王睿,很高兴认识大家!

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
7-8 敲笨钟 (15分) 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。 现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。 输入格式: 输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。 输出格式: 对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。 输入样例: 5 xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong. tian sheng wo cai bi you yong, qian jin san jin huan fu lai. xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long. zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong. ren xian gui hua luo, ye jing chun shan kong. 输出样例: xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong. Skipped xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong. Skipped Skipped

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王睿丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值