吹泡泡之路(2015.4.26)

来源:互联网 发布:盛光网络与盛世网络 编辑:程序博客网 时间:2024/05/01 13:52

发现最近不管睡得多晚,总能早早爬起来(:з」∠)今天六点多醒的,然后刷手机到八点起床,打开计蒜客忽然想入个键盘,于是就去买了个键盘,顺带写了几句话。
今天的内容从while开始(感觉像重新学了一遍C = =)

几种控制语句

while和for算的是1加到100,do-while算的是1加到num(输入值)。


while循环

#include<iostream>using namespace std;int main(){    int sum=0;    int i=1;    while(i<=100){        sum=sum+i;        i=i+1;    }    cout<<sum<<endl;    return 0;}

Do-while循环

using namespace std;int main(){    int num;    cin>>num;    int sum=0;    int i=1;    do{        sum=sum+i;        i++;    }while(i<=num);    cout<<sum<<endl;    return 0;}

For循环

#include<iostream>using namespace std;int main(){    int i,sum=0;    for(i=1;i<=100;i++){        sum=sum+i;    }    cout<<sum<<endl;    return 0;}

countinue语句

#include<iostream>using namespace std;int main(){    int i,sum=0;    for(i=1;i<11;i++){        sum+=i;        continue;        cout<<i<<endl;    }    cout<<sum<<endl;    return 0;}

测试:判断质数

#include<iostream>using namespace std;bool is_prime(int n){    if(n<2){        return false;    }    for (int i=2;i*i<=n;i++){        if(n % i == 0){            return false;        }    }    return true;}int main(){    int N;    cin>>N;    if(is_prime(N)){        cout<<"YES"<<endl;    }else{        cout<<"NO"<<endl;    }    return 0;}

艾玛又不会写了,百度了答案要么就是直接return 0然后break的,要么就是写成函数再判断的,一直搞不清楚怎么在i自增完了之后再输出YES,算法渣渣。


函数


函数声明

#include<iostream>using namespace std;int add(int a,int b);int main(){    int x;    x = add(1,2);    cout<<x<<endl;    return 0;}int add(int a,int b){    return a+b;}

这里直接举先声明后面再实现内容的函数了,到目前为止,看上去和C还是没什么区别= =


递归调用

#include<iostream>using namespace std;int sum(int max);int main(){    cout<<sum(100)<<endl;    return 0;}int sum(int max){    if(max>1){        return max+sum(max-1);    }else{        return 1;    }}

测试:斐波那契数列

斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:

F0=0

F1=1

Fn=Fn1+Fn2

我们约定Fn表示斐波那契数列的第n项,你能知道斐波那契数列中的任何一项吗?

输入包括一行,包括一个数字N(0≤N≤50)。

输出包括一行,包括一个数字,为斐波那契数列的第N项的值。

#include<iostream>using namespace std;int add(int n){    if(n==0||n==1){        return n;    }else{        return add(n-1)+add(n-2);    }}int main(){    int N;    cin>>N;    cout<<add(N)<<endl;}

数组


一维数组

#include <iostream>using namespace std;int main(){    int arr[5]={4,5,3,1,9};    arr[2]=55;    int sum=0,i;    for(i=0;i<5;i++){        sum+=arr[i];    }    cout<<sum<<endl;    return 0;}

二维数组

#include<iostream>using namespace std;int main(){    int arr[2][3],arr2[3]={0,0,0};    int i,j;    for(i=0;i<2;i++){        for(j=0;j<3;j++){            cin>>arr[i][j];            arr2[j]+=arr[i][j];        }    }    cout<<arr2[0]<<" "<<arr2[1]<<" "<<arr2[2]<<endl;    return 0;}

测试:矩阵翻转

输入第一行包括由空格分开的整数M、N、T(0 < M < 200,0 < N < 200,T=0或1),其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转。

输出包括M行N列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。

#include<iostream>using namespace std;int main(){    int M,N,T;    cin>>M;    cin>>N;    cin>>T;    int arr[M][N];    int i,j,temp;    for(i=0;i<M;i++){        for(j=0;j<N;j++){            cin>>arr[i][j];        }    }    if(T==0){        for(i=0;i<M;i++){            for(j=0;j<N/2;j++){                temp=arr[i][j];                arr[i][j]=arr[i][N-1-j];                arr[i][N-1-j]=temp;            }        }    }else{        for(j=0;j<N;j++){            for(i=0;i<M/2;i++){                temp=arr[i][j];                arr[i][j]=arr[M-1-i][j];                arr[M-1-i][j]=temp;            }        }    }    for(i=0;i<M;i++){        for(j=0;j<N;j++){            cout<<arr[i][j]<<" ";        }        cout<<endl;    }    return 0;}

每次做到这个题目,做肯定是能做出来,但总要折腾半天,老是弄混M,N和i,j,哪个代表行哪个代表列,晕死。


待会要去开会了,今天到此结束。

0 0
原创粉丝点击