0


【百日刷题计划 第三天】——熟悉语法 语法基础题

文章目录

💥前言

    ☀️大家好☀️,我是烧蔬菜😁,最近做算法题可以感受到自己确实有点懈怠了😐,所以给自己定一个百日刷题计划,希望自己可以一直坚持下去💪,每天做题,也把题题解写下,记录自己每天的做题痕迹来激励提升自己获取正反馈✊,并且与大家分享下去😁

😉解题报告

💥 [NOIP2011 普及组] 数字反转

biu~

☘️ 题目描述☘️

    **给定一个整数 
  
   
    
     
      N
     
    
    
     N
    
   
  N**,请**将该数各个位上数字反转得到一个新数**。新数也应**满足整数的常见形式**,即**除非给定的原数为零**,否则**反转后**得到的**新数的最高位数字不应为零**(参见样例 2)。

    **输入格式**
     一个整数 
 
  
   
    
     N
    
   
   
    N
   
  
 N。

    **输出格式**
     一个整数,表示反转后的新数。

    **样例 1**
     样例输入 1
     
123
     样例输出 1
     
321
    **样例 2**
     样例输入 2
     
-380
     样例输出 2
     
-83

🤔一、思路:

    (1)反转数除非本身是

 
  
   
    0
   
  
  
   0
  
 
0,否则最高位不得为

 
  
   
    0
   
  
  
   0
  
 
0;
     (2)负号原地不动,罚站.ing

😎二、源码:

#include<iostream>
using namespace std;int n;
string ret;//(1)int flag =0;//(2)intmain(){
    cin >> n;if(n <0){//(3)
        ret +='-';
        n *=-1;}if(n ==0){//(4)
        ret +='0';}while(n){//(5)即n % 10 || n / 10if(n %10|| flag){//(6)
            ret += n %10+48;
            flag =1;}else{}
        n /=10;//(7)}
    cout << ret;return0;}

😮三、代码分析:

    (1)创建一个字符串类型,方便存储反转后的数字
     (2)判断反转后最高位,即第一位数是否为

 
  
   
    0
   
  
  
   0
  
 
0;
     (3)若输入负整数,将负号存入

 
  
   
    r
   
   
    e
   
   
    t
   
  
  
   ret
  
 
ret内,并将负整数变为正整数
     (4)若输入整数为

 
  
   
    0
   
  
  
   0
  
 
0,则将

 
  
   
    0
   
  
  
   0
  
 
0存入

 
  
   
    r
   
   
    e
   
   
    t
   
  
  
   ret
  
 
ret,之后输出;
     (5)

 
  
   
    n
   
  
  
   n
  
 
n的位数没除尽则进行循环
     (6)当前位数与

 
  
   
    f
   
   
    l
   
   
    a
   
   
    g
   
  
  
   flag
  
 
flag都为

 
  
   
    0
   
  
  
   0
  
 
0时,不会存入

 
  
   
    r
   
   
    e
   
   
    t
   
  
  
   ret
  
 
ret内
     (7)消去一位

💥 [NOIP1999 普及组] Cantor 表

biu~

☘️ 题目描述☘️

    现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:

 
  
   
    
     1
    
    
     /
    
    
     1
    
   
   
    1/1
   
  
 1/1 , 
 
  
   
    
     1
    
    
     /
    
    
     2
    
   
   
    1/2
   
  
 1/2 , 
 
  
   
    
     1
    
    
     /
    
    
     3
    
   
   
    1/3
   
  
 1/3 , 
 
  
   
    
     1
    
    
     /
    
    
     4
    
   
   
    1/4
   
  
 1/4, 
 
  
   
    
     1
    
    
     /
    
    
     5
    
   
   
    1/5
   
  
 1/5, …

 
  
   
    
     2
    
    
     /
    
    
     1
    
   
   
    2/1
   
  
 2/1, 
 
  
   
    
     2
    
    
     /
    
    
     2
    
   
   
    2/2
   
  
 2/2 , 
 
  
   
    
     2
    
    
     /
    
    
     3
    
   
   
    2/3
   
  
 2/3, 
 
  
   
    
     2
    
    
     /
    
    
     4
    
   
   
    2/4
   
  
 2/4, …

 
  
   
    
     3
    
    
     /
    
    
     1
    
   
   
    3/1
   
  
 3/1 , 
 
  
   
    
     3
    
    
     /
    
    
     2
    
   
   
    3/2
   
  
 3/2, 
 
  
   
    
     3
    
    
     /
    
    
     3
    
   
   
    3/3
   
  
 3/3, …

 
  
   
    
     4
    
    
     /
    
    
     1
    
   
   
    4/1
   
  
 4/1, 
 
  
   
    
     4
    
    
     /
    
    
     2
    
   
   
    4/2
   
  
 4/2, …

 
  
   
    
     5
    
    
     /
    
    
     1
    
   
   
    5/1
   
  
 5/1, …

    我们以 Z 字形给上表的每一项编号。第一项是 
 
  
   
    
     1
    
    
     /
    
    
     1
    
   
   
    1/1
   
  
 1/1,然后是 
 
  
   
    
     1
    
    
     /
    
    
     2
    
   
   
    1/2
   
  
 1/2,
 
  
   
    
     2
    
    
     /
    
    
     1
    
   
   
    2/1
   
  
 2/1,
 
  
   
    
     3
    
    
     /
    
    
     1
    
   
   
    3/1
   
  
 3/1,
 
  
   
    
     2
    
    
     /
    
    
     2
    
   
   
    2/2
   
  
 2/2,…

    **输入格式**
     整数
 
  
   
    
     N
    
   
   
    N
   
  
 N(
 
  
   
    
     1
    
    
     ≤
    
    
     N
    
    
     ≤
    
    
     1
    
    
     
      0
     
     
      7
     
    
   
   
    1 \leq N \leq 10^7
   
  
 1≤N≤107)。

    **输出格式**
     表中的第 
 
  
   
    
     N
    
   
   
    N
   
  
 N 项。

    **样例 1**
     样例输入 1
     
7
     样例输出 1
     
1/4

🤔一、思路:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(1)可以得出规律:
1)行数与该行拥有数字的数量一致,并依次递增,可知第

    N
   
  
  
   N
  
 
N项数在图中第几行的,第几位
             2)奇偶行分子分母位置相反,可用

 
  
   
    i
   
   
    f
   
  
  
   if
  
 
if语句进行判断

😎二、源码:

#include<iostream>
using namespace std;int x, y;//(1)int n;//(2)int row =1;//(3)int shift;//(4)intmain(){scanf("%d",&n);while(n > row){//(5)
        n -= row;
        row++;}
    shift = n;if(row %2){//奇数        //(6)
        x = row - shift +1;
        y = shift;printf("%d/%d", x, y);}else{//偶数
        x = shift;
        y = row - shift +1;printf("%d/%d", x, y);}return0;}

😮三、代码分析:

    (1)分子,分母
     (2)第n项数
     (3)行
     (4)移动数
     (5)若

 
  
   
    n
   
   
    >
   
   
    r
   
   
    o
   
   
    w
   
  
  
   n>row
  
 
n>row,则寻找

 
  
   
    n
   
  
  
   n
  
 
n所在

 
  
   
    r
   
   
    o
   
   
    w
   
  
  
   row
  
 
row行
     (6)判断所在行是奇数还是偶数,分子与分母在所在行的位置上移动

 
  
   
    s
   
   
    h
   
   
    i
   
   
    f
   
   
    t
   
  
  
   shift
  
 
shift或

 
  
   
    r
   
   
    o
   
   
    w
   
   
    −
   
   
    s
   
   
    h
   
   
    i
   
   
    f
   
   
    t
   
   
    +
   
   
    1
   
  
  
   row-shift+1
  
 
row−shift+1

🤗 鸡汤来咯:

    生活就像海洋,只有意志坚强的人,才能到达彼岸![在这里插入图片描述](https://img-blog.csdnimg.cn/8000260b41b3440d89ce8e4a88116e2d.png)
标签: 算法 c++

本文转载自: https://blog.csdn.net/m0_64141176/article/details/127300274
版权归原作者 烧蔬菜 所有, 如有侵权,请联系我们删除。

“【百日刷题计划 第三天】&mdash;&mdash;熟悉语法 语法基础题”的评论:

还没有评论