1.筛法求素数
#include<iostream>
using namespace std;
#define MAX_NUM 100
char isPrime[MAX_NUM+10];
//筛法求n以内素数
int main(){
for(int i=2;i<=MAX_NUM;++i)
isPrime[i]=1;
for(int i=2;i<=MAX_NUM;++i){
if(isPrime[i])//将MAX_NUM以内每一个数的所有倍数标记
for(int j=2*i;j<=MAX_NUM;j+=i)
isPrime[j]=0;
}
for(int i=2;i<=MAX_NUM;++i)
if(isPrime[i])
cout<<i<<endl;
return 0;
}
2.数组初始化
用数组取代复杂分支结构:
#include<iostream>
#include<string>
using namespace std;
string week[]={"Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday","Sunday"};
int main(){
int n;
cin>>n;
if(n>7||n<1)
cout<<"Illegal";
else
cout<<week[n-1];
return 0;
}
3.例题
已知2012年1月25日是星期三,编写一个程序,输入用“年月日” 表示的一个2012年1月25日以后的日期,输出该日期是星期几(星期天输出0)?
sample Input
2015 11 02
sample Output
1
思路:由题目知道2012年1月22是星期天,算出给定日期从该天起过了x天,然后输出x%7.
#include<iostream>
using namespace std;
int monthDays[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int year,month,date;
int days=0;//2012-01-22开始到输入日期过了多少天
cin>>year>>month>>date;
for(int y=2012;y<year;++y){
if((y%4==0&&y%100!=0)||y%400==0)
days+=366;
else
days+=365;
}
if((year%4==0&&year%100!=0)||year%400==0)
monthDays[2]=29;
for(int m=1;m<month;m++)
days+=monthDays[m];
days+=date;
days-=22;
cout<<days%7<<endl;
return 0;
}
4.数组越界
int a[10];
a[-2]=5;
a[200]=10;
a[10]=20;
int m=a[30];
以上可通过编译,但是可能导致程序运行出错。因为可能写入了别的变量的内存空间,或者写入指令的内存空间。
5.矩阵乘法
a b c x ax+by+cz
X y =
d e f z dx+dy+fz
a b c x w ax+by+cz aw+bu+cv
X y u =
d e f z v dx+dy+fz dw+eu+fv
以上就是矩阵的乘法
例题:编程输入矩阵,输出它们的乘积。
输入:
2 3
2 4 5
2 1 3
3 3
1 1 1
2 3 2
0 1 4
输出:
10 19 30
4 8 16
code:
#include<iostream>
using namespace std;
int a[8][8],b[8][8],c[8][8];
int main(){
int m,n,m1,n1;
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
cin>>m1>>n1;
for(int i=0;i<m1;i++)
for(int j=0;j<n1;j++)
cin>>b[i][j];
//矩阵相乘 行列相乘
for(int i=0;i<m;i++){
for(int j=0;j<n1;j++) {
c[i][j]=0;
for(int k=0;k<n;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n1;j++){
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
6.素数相关
判断一个数是否是素数
code:
#include <stdio.h>
int main(){
int a = 0;
int num = 0;
scanf("%d", &num);
for (int i=2; i <= num-1;i++){
if (num % i == 0){
a++;
}
}
if (a==0){
printf("YES\n");
}else{
printf("NO\n");
}
}
当然也可以不打表通过筛选法来判断一个数是不是素数,思想和上面是一样的
code:
bool isprime(int n)
{
if(n==1)return false;
if(n==2)return true;
if((n&1)==0)return false;
for(int i=3; i*i<=n; i+=2)
if(n%i==0)
{
return false;
break;
}
return true;
}