IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> PAT Basic Level Practice (中文)C语言 -> 正文阅读

[C++知识库]PAT Basic Level Practice (中文)C语言


注:本文格式借鉴 Belous博客,因很长时间没有使用,代码格式并不规范,只能说在我自己提交时可以通过,如有问题请指正。


1001 害死人不偿命的(3n+1)猜想

题目地址

#include<stdio.h>

int main()
{
  int i = 0,n;
  scanf("%d",&n);
  while(n != 1){
    if(n%2 != 0) n = (3*n+1)/2;
    else n = n/2;
    i++;
  }
  printf("%d",i);
  return 0;
}

根据奇偶来判断所要进行的运算,并在得到1时输出所需步骤数。‘


1002 写出这个数

题目地址

#include <stdio.h>
#define TURE 1
#define FALSE 0

int main(){
	char num;
	int sum=0,scanf_return;
	while(TURE){//求和
		scanf_return=scanf("%c",&num);
		if(num == '\n'&&scanf_return>=0) break;
		//scanf_return是为了避免PTA报scanf警告,此处只是尝试使用,试验成功但一般没有必要
		sum += num - '0';//因为num是字符所以要减去字符0
	}
	
    int zero_num=0;
	for(int i = 100;i>=1;i/=10){//因为给的数小于10^100,所以和要小于1000,即一定是三位数及以内
        if(sum/i%10==0&&zero_num==0) continue;//判断位数,三位数为零则直接跳到两位数,以此类推
        zero_num++;
		switch (sum/i%10){
		case 0:printf("ling"); break;
		case 1:printf("yi"); break;
		case 2:printf("er"); break;
		case 3:printf("san"); break;
		case 4:printf("si"); break;
		case 5:printf("wu"); break;
		case 6:printf("liu"); break;
		case 7:printf("qi"); break;
		case 8:printf("ba"); break;
		case 9:printf("jiu"); break;
		}
		if(i>1) printf(" ");//使除最后一位外后面都留一个空格符
	}
	return 0;
}

先求各位相加的总和,再根据每一位输出对应的拼音。


1003 我要通过!

题目地址

#include <stdio.h>
#include <string.h>

int main(){
    int num;
    char str[100];
    scanf("%d",&num);
    for(int i = 1; i <=num;i++){//根据题目要求,循环输入数字的次数
        scanf("%s",str);
        int state_p=0,state_t=0,p_a=0,a_a=0,t_a=0;//刷新状态,判断下一组字符串
        for(int j=0;j < strlen(str);j++){
            if(str[j] == 'P') state_p++;
            else if(str[j] == 'T') state_t++;
            //state_p为0时表明P未输入,1时表示P已输入,大于1表示P出现超过两次,state_t同理
            else if(str[j] == 'A'){
                if(state_p == 0&&state_t == 0) p_a++;
                else if(state_p == 1&&state_t == 0) a_a++;
                else if(state_p == 1&&state_t == 1) t_a++;
                //根据P和T的状态判断A的输入位置,p_a表示在P之前的A个数,a_a表示在P和T之间的A个数,t_a表示在T之后的A个数
            }
            else state_p = 10;//表示出现P,A,T字符以外的字母,不想再定义一个变量专门表示,就偷个懒用P的状态
        }
        if(t_a == p_a * a_a&&state_p==1&&state_t==1&&a_a!=0) printf("YES");//寻找规律得出YES时的条件
        else printf("NO");
        if(i<num) printf("\n");//解决除最后一行外都要回车
    }
    return 0;
}

因为一开始使用连续两个scanf读取字符,出现了回车存入缓存中占用字符的情况。虽然使用使用刷新缓存和在读取字符前加上空格符来跳过,但在PTA平台中都会编译超时,不知道是什么原因。后来改变策略使用字符串直接读取,成功解决。
规律:

  1. P和T出现并只出现1次
  2. T之后A的个数等于P之前A的个数和P于T之间A的个数的乘积
  3. P与T之间至少有一个A

1004 成绩排名

题目地址

#include <stdio.h>
#include <string.h>

int main(){
    int num;
    scanf("%d",&num);
    char xingming[num][15],kecheng[num][15];
    int chengji[num],temp_max = 0,temp_min = 0;
    for(int i = 0;i < num;i++){
        scanf("%s %s %d",&xingming[i],&kecheng[i],&chengji[i]);
        if(chengji[i] > chengji[temp_max]) temp_max = i;
        if(chengji[i] < chengji[temp_min]) temp_min = i;
    }
    printf("%s %s\n",xingming[temp_max],kecheng[temp_max]);
    printf("%s %s",xingming[temp_min],kecheng[temp_min]);
    return 0;
}

普通的比较大小然后输出。


1005 继续(3n+1)猜想

题目地址

#include <stdio.h>

int main(){
    int num,group[100];
    scanf("%d",&num);
    int n = num;
    for(int i = 0;i < num;i++){
        scanf("%d",&group[i]);
    }
    for(int i = 0;i < num;i++){//比较出现的数值
        int temp = group[i];
        while(temp != 1&&temp != 0){
            if(temp%2 != 0) temp = (3*temp+1)/2;
            else temp = temp/2;
            for(int j = 0;j < num;j++){
                if(group[j] == temp){
                    group[j] = 0;
                    n--;
                    break;
                }
            }
        }
    }
    int buf;
    for(int i=0; i<num-1; i++){//冒泡排序
        for(int j=0; j<num-1-i; j++){
            if(group[j] < group[j+1]){
               buf = group[j];
               group[j] = group[j+1];
               group[j+1] = buf;
           }
       }
    }
    for(int i = 0;i < n;i++){//输出
        printf("%d",group[i]);
        if(i != n-1) printf(" ");
    }
    return 0;
}

将出现的数字用零进行标记,再使用冒泡排序进行大小比较,最后输出。


1006 换个格式输出整数

题目地址

#include <stdio.h>

int main(){
    int input;
    scanf("%d",&input);
    for(int i = input/100;i > 0;i--){
        printf("B");
    }
    for(int i = input%100/10;i > 0;i--){
        printf("S");
    }
    for(int i = 1;i <= input%10;i++){
        printf("%d",i);
    }
}

简单过头了。。。


# To Be Continued
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 13:50:50  更:2021-08-14 13:52:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 6:22:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码