一周学完C++,第二天 循环语句

1.while循环

int i=1,sum=0;
   while(i <=100)
   {
       sum = sum + i;
       i++;
   }
   cout << sum << endl;
   return 0;

2.用while实现斐波那契数列

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;

3.for循环

 for(初始化语句-1;条件语句-2;表达式-3){循环体-4}  运行路径:1->2->4->3->2

for(int i=0;i<10;i++)
    {
        cout << i << endl;
    }

3.1 求1-100的和

 int num=0;
    for (int i=1;i<=100;i++){
        num=num+i;
    }
     cout << num << endl;

3.2 用for实现斐波那契数列

int n,c;
    cin >> n;
    int a = 1;
    int b = 1;
    for(int i=0;i<n-1;i++){
        c = a + b;
        a = b; 
        b = c;
    }
    cout << a <<endl; //从a开始

4.跳出循环

4.1 break

 int sum=0;
    for(int i=1;i<=100;i++)
    {
        if(i>50) break;
        sum = sum+i;
    }
    cout << sum << endl;

4.2 continue

 int sum2=0;
    for(int i=1;i<=100;i++)
    {
        int x = i;
        x = x +i ;
        if(i==50) continue;
        sum2 = sum2+x;
    }
    cout << sum2 << endl;
    

5.判断是否是质数

 //判断n是不是质数
    int n;
    cin >> n;
    bool is_prime = true;
    
    for(int i=2;i<=n-1;i++){
        if(n%i==0)
        {
            is_prime = false;
            break;
        }
    }
        if(is_prime) cout << "yes" << endl;
        else cout << "no" << endl;

6.累加奇偶和

 int sum =0 ;
    for(int i=1;i<=100;i++)
    {
        if(i%2) continue;
        sum = sum+i;
    }
    cout << sum << endl;

7.嵌套多层循环

 int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cout << "* ";
        }
        cout << endl;
    }

8.打印数字矩阵

int n;
    cin >> n;
    for(int i = 0 ,k=1; i < n; i++) {
        for(int j = 0; j < n; j++) {
            // cout << k << " ";
            printf("%5d ",k);
            k++;
        }
        cout << endl;
    }

9.打印1-100内所有质数

for(int i=2;i<=100;i++){
        bool is_prime = true;
        for(int j=2;j<i;j++){
            if(i%j==0){
                is_prime = false;
                break;
            }
        }
        if(is_prime == true) cout << i << endl;
    }

然而实际中,容易遇到超时的情况,这里给一种基础的优化 

#include <bits/stdc++.h>
using namespace std;

int main() {
   int n;
   cin >>n;
   for(int i=1;i<=n;i++)
   {
       int num;
       bool is_prime = true;
       cin >> num;
       for(int i=2;i*i<=num;i++){
           if(num%i==0){
               is_prime = false;
               break;
           }
       }
       if(is_prime) cout << num << " is prime" << endl;
       else cout << num << " is not prime" << endl;
   }
}

 

10.打印棱形

10.1 暴力法

int n, space, stars;
    cin >> n;
 //计算中间行,用于确定最大星号数
    int mid = (n / 2) + 1;
    // 打印上半部分
    for (int i = 1; i <= mid; i++) {
        space = mid - i;
        stars = 2 * i - 1;
        for (int j = 1; j <= space; j++) {
            cout << " ";
        }
        for (int j = 1; j <= stars; j++) {
            cout << "*";
        }
        cout << endl;
    }
    // 打印下半部分
    for (int i = mid - 1; i >= 1; i--) {
        space = mid - i;
        stars = 2 * i - 1;
        for (int j = 1; j <= space; j++) {
            cout << " ";
        }
        for (int j = 1; j <= stars; j++) {
            cout << "*";
        }
        cout << endl;
    }

10.2 曼哈顿法

这个方法有点复杂,后续看记忆性再写一篇详细的推导过程

 int n;
    cin >> n;
    int x = n /2 ,y = n/2;
    for(int i=0;i<n;i++)
    {
        for(int j =0;j<n;j++)
        {
            if(abs(i-x)+abs(j-y)<=n/2)
            cout << "*";
            else
            cout << " ";
        }
        cout << endl;
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值