【C++】每周一练(上周)

题目描述: 

 


分析思路

做这种题目无非就是找到其中蕴含的【规律】 

首先,根据描述,我们知道:

1.当排数为偶数时,数字排列是从右上到左下的

 2.当排数为奇数时,数字排列是从左下到右上的                                 

具体规律是什么,我们先把框架基础的写好,往下看,其他规律慢慢分析


代码书写

框架+输入

#include <iostream>
using namespace  std;
int main() {
    int n;
    scanf("%d",&n);输入
    int t = 1;//记录这是第几排
    int num = 1;//记录这个数是第几个数字
 
    return 0;
}

循环遍历 判断是奇数还是偶数排

因为我们不知道循环次数,所以应该用wile循环,并且按照对应的排数对应的顺序进行for循环遍历

#include <iostream>
using namespace  std;
int main() {
    int n;
    scanf("%d",&n);
    int t = 1;
    int num = 1;
    while (1){
        int n1,n2;//代表“/”左右两边的数
        if (t%2!=0){
            for (int i = t;i>=1;i--){//奇数排从左下到右上
                
               

                
            }

            t++;//增加排数

        }
        else{
            for (int i = 1;i<=t;i++){//偶数排从右上到左下
                
            }

            t++;//增加排数

        }
    }
    return 0;
}

观察发现规律

写好遍历循环后,寻找 i(这一排第一个数) t(排数)之间的数量关系,发现【规律】

n1 = i;  n2 = t-i+1;

#include <iostream>
using namespace  std;
int main() {
    int n;
    scanf("%d",&n);
    int t = 1;
    int num = 1;
    while (1){
        int n1,n2;
        if (t%2!=0){
            for (int i = t;i>=1;i--){
                n1 = i;
                n2 = t-i+1;//根据规律计算

              
            }

            t++;

        }
        else{
            for (int i = 1;i<=t;i++){
                n1 = i;
                n2 = t-i+1;
               
            }

            t++;

        }
    }
    return 0;
}

如何现在我们计算的数就是要求的数(判断),就要输出,然后结束程序

#include <iostream>
using namespace  std;
int main() {
    int n;
    scanf("%d",&n);
    int t = 1;
    int num = 1;
    while (1){
        int n1,n2;
        if (t%2!=0){
            for (int i = t;i>=1;i--){
                n1 = i;
                n2 = t-i+1;

                if (num == n){//判断是不是要求的数
                    printf("%d/%d",n1,n2);
                    return 0;
                }
                num++;//更新计数器
            }

            t++;

        }
        else{
            for (int i = 1;i<=t;i++){//同理
                n1 = i;
                n2 = t-i+1;
                if (num == n){
                    printf("%d/%d",n1,n2);
                    return 0;
                }
                num++;
            }

            t++;

        }
    }
    return 0;
}

终极代码

#include <iostream>
using namespace  std;
int main() {
    int n;
    scanf("%d",&n);
    int t = 1;
    int num = 1;
    while (1){
        int n1,n2;
        if (t%2!=0){
            for (int i = t;i>=1;i--){
                n1 = i;
                n2 = t-i+1;

                if (num == n){
                    printf("%d/%d",n1,n2);
                    return 0;
                }
                num++;
            }

            t++;

        }
        else{
            for (int i = 1;i<=t;i++){
                n1 = i;
                n2 = t-i+1;
                if (num == n){
                    printf("%d/%d",n1,n2);
                    return 0;
                }
                num++;
            }

            t++;

        }
    }
    return 0;
}


               

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值