小兔砍柴问题——旧题新解

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

题记

兔年来到,首先祝大家新年快乐,在黑兔年大展宏图,AC无bug

同时算法篇随即开启了旧题新解析的部分

Description

相传在癸卯年间,兔哥一家在年前就要为入冬的柴火做准备,在前辈一代接一代的经验下,他们发现把砍下来的柴火按照长度相近的对称摆放,在捆扎时可以最大化的负荷更多,因此希望我们作出一个小程序,可以快速判断砍下的柴火长度是否为对称的一堆。

下面我们将问题简化————变成判断对称数问题

即:在输入一个整型数(该数即代表柴火的长度),判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

Input

一个整型数

Output

输出是yes,或者no

Sample Input 1

12321

Sample Output 1

yes

题解:

#include <stdio.h>

int main() {
    int num;
    int a;
    int b;
    int count;//num用来存储待判断的数字串,a用来存放最开始的数字串,b用来接收num倒序的数字串,count是接收每次余的一位数到b
    scanf("%d", &num);
    b = 0;
    a = num;
    while(num){
        count = num%10;
        b = (b + count)*10;
        num = num/10;
    }
    b = b/10;
    if (b == a){
        printf("yes\n");
    } else{
        printf("no\n");
    }
    return 0;
}

思路:

  • 对于单纯的数字串的对称判断,可以直接用取除数和取余来表示;

    1. 首先通过while循环来不断对num进行取余放入b。在取除数减少位数,
    2. 终将num倒序输入b,最初的num存储在a中
    3. 并通过比较a和b来判断是否是对称数(不过在此有个tips,按照while会使b多一位,需要最后输出时/10处理一下)
  • 创新点:本次判断没有常规的继续使用数组来存储每个数组而后挨个比较首尾下标中代表的数值来判断是否为对称数,

  • 新的解法节省了空间,避免了空间浪费。

posted @ 2023-01-26 15:03  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源