一维数组部分
上课时间与安排
时间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 InNInN个数约有一个质数,这点读者了解即可。
质数的判断(试除法)
对于质数的判断,最简单也最容易想到的方法就是一个一个的筛选,也叫试除法。
如果要判断一个数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; }