C++系列之一维数组内容与应用

一维数组部分

上课时间与安排

时间20231808 18:10-20:10 一维数组的应用 模拟法与开关门

上课内容

课程链接:

C++等级考试一点通 /C++中级 (20)一维布尔数组的应用 + 回顾(11)分解质因数 + 回顾(8)循环中的break语句

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。分解质因数的方法

360=2*2*2*3*3*5

在这里插入图片描述

一维数组

数据类型 数组名 [数组长度];
数据类型 数组名[数组长度]={
    
    1,2...};
数据类型 数组名[ ]={
    
    1,值2...};
	//数据类型 数组名 数组长度
	int arr[5];
	//给数组中的元素进行赋值
	arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 50;
	//访问数据元素
	cout << arr[0] << endl;
	cout << arr[1] << endl;
	cout << arr[2] << endl;
	cout << arr[3] << endl;
	cout << arr[4] << endl;

  int arr[5] = {
    
     10,20,30,40,50 };
	//print all the elements in the array in a loop
	for (int i = 0; i < 5; i++)
	{
    
    
		cout << arr[i] << endl;
	}

代码部分

========================================
时间:20231208
代码名称:跳出无限循环:
知识点:循环的使用,if判断的使用,break的使用。

程序设计:
一个程序,可以接受你的输入,并且输出,无限循环。
当你输入9999,程序结束。

#include <iostream>

using namespace std;

int main() {
    
    
	for (int i = 0; i < 2;) {
    
    
		int num;
		cin >> num;
		if (num != 9999) {
    
    
			cout << num << endl;
			//TODO
		} else {
    
    
			break;
		}
	}
}

========================================
时间:20231208
代码名称:判断是否是质数:
知识点:循环的使用,if判断的使用,break的使用,质数的理解。

程序设计:
一个程序,接受你的输入,如果输入为质数,输出为是,如果输入不是质数,输出为否。

#include <iostream>
using namespace std;
int main() {
    
    
	
	int num;
	cin>>num;
	if(num==1){
    
    
		cout<<"否";
		return 0;
	}
	if(num==2){
    
    
		cout<<"是";
		return 0;
	}
	for(int i=3;i<=num;i++){
    
    
		if(num % i==0 && i<num){
    
    
			cout<<"否";
			return 0;
		}
		if(i==num){
    
    
			cout<<"是";
			return 0;
		}
	}
	return 0;
}

========================================
时间:20231208
代码名称:门的相反动作:
知识点:

程序设计:
一个程序,接受你的输入n,n表示n个人和n个房间,如果1号服务员把房间都打开,2号服务员把2的倍数的房间执行相反操作
3号服务员把3的倍数的房间执行相反动作,依次类推。

思路:
模拟法,在黑板上写出模拟的过程,然后用算法实现。

写:

#include <iostream>
using namespace std;
// 定义一个数组 存储房间的状态 初始值都是0
const int N=1000;
int arr[N+1];
int main() {
    
    
	// 定义变量num 接受人和房间数量
	int num;
	cin>>num;
	// 循环num个人 i为服务员号
	for(int i=1;i<=num;i++){
    
    
		
		// 循环num个房间 j为房间号
		for(int j=1;j<=num;j++){
    
    
			// j房间号是i服务员的倍数,服务员就把该房间执行相反操作
			if(j%i==0){
    
    
				if(arr[j]==0){
    
    
					arr[j]=1;
				}else{
    
    
					arr[j]=0;
				}
			}
		}
	}
	//输出
	for(int i=1;i<=num;i++){
    
    
		if(arr[i]==1){
    
    
			cout<<i<<" ";
		}
	}	
	return 0;
}

求素数问题

质数的定义:若一个正整数除了1和它自身之外不能被任何自然数整除,则该数称为质数,也叫素数。否则为合数。
由定义可知,所有小于等于1的数既不是质数,也不是合数。
质数的分布较为稀疏,对于一个足够大的数S,不超过S的质数大约有 N I n N \frac{N}{InN} InNN个,也就是说每 I n N InN InN个数约有一个质数,这点读者了解即可。

质数的判断(试除法)

对于质数的判断,最简单也最容易想到的方法就是一个一个的筛选,也叫试除法。

如果要判断一个数N,那么我们要对2~N-1的所有数都筛选一遍吗,显然不用。首先肯定的是N-1肯定不能整除N,那么是否能进一步缩小范围。我先给出答案:2~sqrt(N)

代码如下:

#include<cstdio>
bool isprime(int num){
    
    
	if(num==2)
	    return true;
	if(num%2==0 || num<2)
	    return false;
	else{
    
    
		for(int i=3;i*i<=num;i+=2){
    
    
			if(num%i==0){
    
    
				return false;
			}
		}
		return true;
	}
}
int main(){
    
    
	int x;
	scanf("%d",&x);
	if(isprime(x)){
    
    
		printf("Yes");
	}
	else{
    
    
	    printf("No");
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/m0_38139250/article/details/134976990