C++基础课-----1.1 变量、输入输出、表达式和顺序语句

案例一:

#include<iostream>
using namespace std;//为了防止命名冲突
int main(){
    cout << "hello world" << endl;
    return 0;
}

在这里插入图片描述

#include<cstdio>//引入可以使用
print()
scanf()

变量类型

    bool false/true   1byte
    char 'c','a',' ','\n'   1byte
    int -2147483648---2147483647     4byte
    float 1.23,2.5,1.235e2,  6-7位有效数字   4byte
    double 15--16有效数字    8byte
    long long -2^63-----2^63-1    8byte
    long double 18--19位有效数字    12byte 16byte

提交代码常见错误

Wrong Answer 错误
Time Limit Error 超时
Memory Limit Error 超内存
Segmentation Fault 数组越界

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
presentation error 意为输出格式错误,也就是你的输出没有按照输出要求进行格式化。

斐波那契数列数列

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;

int main(){
   int a,b;//斐波那契数列数列。
   a = 1;
   b = 1;
   int n;
   cin >> n;
   int i = 0;
   while (i < n - 1){
       int c = a + b;
       a = b;
       b = c;
       i++;
   }
   cout << a << endl;
   return 0;
}

如图:

在这里插入图片描述

曼哈顿距离:
(x1,y1)
(x2,y2)
d=|x2-x1| + |y2 - y1|

在这里插入图片描述
在这里插入图片描述

完全数

一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。

例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6。

现在,给定你 N 个整数,请你依次判断这些数是否是完全数。

解答:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    while(n--){
        int x;
        cin >> x;
        int s = 0;
        for(int i = 1;i< x;i++){
            if (x % i == 0){
                s +=i;
            }
        }
        if(s == x){
            printf("%d is perfect\n",x);
        }else{
            printf("%d is not perfect\n",x);
        }
    }
    return 0;
}```//代码提交状态: Time Limit Exceeded   
//c++一秒内算不能超过一亿次,
//10亿次。

优化版本:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    while(n--){
        int x;
        cin >> x;
        int s = 0;
        for(int i = 1;i*i< x;i++){
            if (x % i == 0){
                if(i< x){
                    s +=i;
                }
                if(x/i != i && x/i < x){
                    s += x/i;
                }
            }
        }
        if(s == x){
            printf("%d is perfect\n",x);
        }else{
            printf("%d is not perfect\n",x);
        }
    }
    return 0;
}

斐波那契数列

#include<cstdio>
#include<iostream>
using namespace std;

int main(){
    int f[100];
    
    f[0] = 0,f[1] = 1;
    int n;
    cin >>n;
    for(int i = 2;i <=n;i++){
        f[i]=f[i-1]+f[i-2];
    }
    printf("%d",f[n]);
    return 0;
}

输入一个n,再输入n个整数.将这n个整数逆序输出.

#include<cstdio>
#include<iostream>
using namespace std;

int main(){
    int a[100];
    int n,k;
    cin >> n >> k;
    
    for(int i = 0;i<n;i++){
        cin >> a[i];
    }
    while(k--){
        int t = a[n-1];
        for(int i = n-2;i>=0;i--){
            a[i+1] =a[i];
        }
        a[0]=t;
    }
    for(int i =0;i<n;i++){
        cout << a[i] << ' ';
    }
    return 0;
}

在这里插入图片描述
优化;

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    int a[100];
    int n,k;
    cin >> n >> k;
    for(int i =0;i< n;i++){
        cin >> a[i];
    }
    reverse(a,a + n);
    reverse(a,a+k);
    reverse(a+k,a+n);
    
    for(int i =0;i < n;i++){
        cout << a[i] << ' ';
    }
    return 0;
}

reverse简介

求阶乘

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const double eps = 1e-6;

double C(int a,int b){
    double res  = 1;
    for(int i=1,j=a;i<=b;i++,j--){
        res = res*j/i;
    }
    return res;
}
int main(){
    int a,b;
    cin >> a >> b;
    cout << C(a,b) << endl;
    return 0;
}

在这里插入图片描述

计算2的N次方。N <=10000.

在这里插入图片描述
个位存在a[0],高位在后面。

2的N次方的大数求法:

#include<iostream>
#include<cmath>
using namespace std;

const int N = 3010;

int main(){
    int a[N] = {1};
    int n;
    cin >> n;
    int t=1;
    // for(int i =0;i<n;i++){
    //     t=t*2;
    // }
    // cout << "t = " << t << endl;
    int m = 1;
    for(int i = 0;i < n;i++){
        int t =0;
        for(int j = 0;j< m;j++){
            t +=a[j] * 2;
            a[j] = t % 10;
            t /= 10;
        }
        if(t){
            a[m++] = 1;
        }
    }
    for(int i = m -1;i >=0;i--){
        cout << a[i];
    }
    return 0;
}

在这里插入图片描述

#include

memset(a,0,sizeof a)

a:数组名字
0:初始值
sizeof a:数组长度。(注以字节为单位).

memcpy(b,a,sizeof a);

b:目标数组
a:原数组
sizeof a:要复制数组长度 (注以字节为单位).

753. 平方矩阵 I

输入整数 N,输出一个 N 阶的回字形二维数组。

数组的最外层为 1,次外层为 2,以此类推。

输入格式
输入包含多行,每行包含一个整数 N。

当输入行为 N=0 时,表示输入结束,且该行无需作任何处理。

输出格式
对于每个输入整数 N,输出一个满足要求的 N 阶二维数组。

每个数组占 N 行,每行包含 N 个用空格隔开的整数。

每个数组输出完毕后,输出一个空行。

数据范围
0≤N≤100
输入样例:
1
2
3
4
5
0
输出样例:
1

1 1
1 1

1 1 1
1 2 1
1 1 1

1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin >>n,n){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                int up=i,down=n-i+1,left =j,right =n-j+1;
                cout << min(min(up,down),min(left,right)) << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}

在这里插入图片描述

754. 平方矩阵 II

在这里插入图片描述

#include<iostream>
using namespace std;

int q[100][100];

int main(){
    int n;
    while(cin >> n,n){
        // 方法一:
        // for(int i=0;i<n;i++){
        //     q[i][i]=1;
        //     for(int j=i+1,k=2;j<n;j++,k++){
        //         q[i][j]=k;
        //     }
        //     for(int j=i+1,k=2;j<n;j++,k++){
        //         q[j][i]=k;
        //     }
        // }
        // for(int i=0;i<n;i++){
        //     for(int j=0;j<n;j++){
        //         cout << q[i][j] << ' ';
        //     }
        //     cout << endl;
        // }
        // cout <<endl;
        //方法二:a[i][j]=abs(i-j) +1
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                q[i][j]=abs(i-j)+1;
            }
        }
        
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cout << q[i][j] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值