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++知识库 -> 题目2021.12.2 -> 正文阅读

[C++知识库]题目2021.12.2

?

目录

1. 成绩排名(pta)

1.1 题目描述

?1.2 代码实现

1.3 反思(关于字符串数组越界)

2.素数对猜想

2.1 题目描述

2.2 代码实现

?2.3 反思

3. 简化的插入排序(oj)?

3.1 题目描述

?3.2 代码实现

3.3 反思

4.递归找公约数

4.1 题目描述

?4.2 递归 思路

4.3 代码实现


1. 成绩排名(pta)

?

1.1 题目描述

?

?1.2 代码实现

#include<stdio.h>
struct student{
	char name[11]; //注意注意!!!
	char number[20];
	int score;
};
int main(){
	int n,i,max=0,min=1000,max_num,min_num;
	scanf("%d",&n);
	struct student stu[n];
	for(i=0;i<n;i++){
		scanf("%s %s %d",&stu[i].name,&stu[i].number,&stu[i].score);
		if(stu[i].score>=max){
			max_num=i;
			max=stu[i].score;
		}
		if(stu[i].score<=min){
			min_num=i;
			min=stu[i].score;
		}
	}
	printf("%s %s\n",stu[max_num].name,stu[max_num].number);
	printf("%s %s\n",stu[min_num].name,stu[min_num].number);
	return 0;
}

1.3 反思(关于字符串数组越界)

题目的要求写的是名字和学号都是不超过10字符的数

但是我们在定义的时候 要将数组的大小定义为11

因为他是个字符串 末尾会自动加上'\0'

写成10会有数组越界的问题~

复盘一下步骤

1.定义一个结构体 里面存放一个学生名字和对应的成绩

2.定义一个结构体数组 然后循环将数据存放进数组里

3.用 max 和 min 找出 stu[ ].score 的最大值和最小值对应的序号

4.输出stu[max_number]和stu[min_number]对应数据

2.素数对猜想

2.1 题目描述

2.2 代码实现

#include<stdio.h>
#include<math.h>
int isprime(int n){   /*判断是否为素数*/
	int i,ret=1;
	if(n==1)ret=0;
	if(n!=2&&n%2==0)ret=0;
	for(i=3;i<sqrt(n)+1;i+=2){
		if(n%i==0){
			ret=0;
			break;
		}
	}
	return ret;
}
int prime_list(int n,int arr[]){ /*创建一个到n的素数表*/
	int i,cnt=0;
	for(i=2;i<=n;i++){
		if(isprime(i)){
			arr[cnt]=i;
			cnt++;
		}
	}
	return cnt;
}
int main(){
	int n,i,count,cnt=0;
	int arr[10000];
	scanf("%d",&n);
	count=prime_list(n,arr);
	for(i=0;i<count+1;i++){
		if((arr[i]+2)==arr[i+1]){
			cnt++;
		}
	} 
	printf("%d\n",cnt);
	return 0;
}

?2.3 反思

复盘一下步骤

1.做一个判断是否为素数的函数(isprime)

2.定义出一个数组,里面都是素数且最大数字小于n

3.如果a[i]=a[i+1]-2? ?计数加一

3. 简化的插入排序(oj)?

3.1 题目描述

?3.2 代码实现

#include <stdio.h>
 
int main(){
 
    int a[100],n,i,m,t=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=n;i>0;i--)
    {
        if(m>=a[i-1])
        {
	        a[i]=m;   
	        t=1;         //当m<a[i]时,把a[i]塞到a[i+1]里面,
            break;       //因为数组有n+1个,不用担心越界的问题
                         //当m>a[i]时,使得啊a[i+1]=m
	        
        }
        else
            a[i]=a[i-1];
    }
    if(t==0)
        a[0]=m;
    for(i=0;i<n+1;i++)
        printf("%d ",a[i]);
    return 0;
  
}

3.3 反思

虽然用一个又臭又长的代码过了oj 但确实 又臭又长~?

所以上csdn思考了一下别人的代码

在选择插入m的位置的时候

一开始我想的是选择m>a[i]&&am<a[i+1]的位置

但这样有很多麻烦的地方 比如说如果m比数组最后一个数字都大的时候就很麻烦

而且把数组的每个数字都往后推的时候 要选择i+2的位置开始塞前一个数字 也会变得非常复杂

所以 基本上 得换个思路实现它

前提条件:原本的数组就是从小到大排列

从n-1开始循环

当m<a[i]时,把a[i]塞到a[i+1]里面,因为数组有n+1个,不用担心越界的问题

当m>a[i]时,使得啊a[i+1]=m

最后来个遍历就可以实现了

4.递归找公约数

4.1 题目描述

?4.2 递归 思路

辗转相除法求最大公约数的方法:

??1、先用大的一个数除小的一个数,得第一个余数;

??2、再用第一个余数除小的一个数,得第二个余数;

??3、又用第二个余数除第一个余数,得第三个余数;

??4、这样逐次用后一个数去除前一个余数,直到余数是0为止。最后一个除数就是所求的最4.大公约数。

4.3 代码实现

#include<stdio.h>
int dec(int n,int m){
	int ret;
	if(n%m==0)ret=m;
    else{
    	ret=dec(m,n%m);
	}
	return ret;
}
int main(){
	int n,m,i,num,t;
	scanf("%d %d",&n,&m);
	if(n<m){t=n;n=m;m=t;}
	printf("%d",dec(n,m)); 
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:51:13  更:2021-12-07 11:51:37 
 
开发: 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年11日历 -2024/11/24 10:50:34-

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