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;
}