Apologize


私信TA

用户名:1293606038

访问量:2177

签 名:

公众号:Apologize2U

等  级
排  名 9805
经  验 1128
参赛次数 0
文章发表 5
年  龄 20
在职情况 学生
学  校 烟台大学
专  业

  自我简介:

首先是借鉴了前辈的网址奉上:蓝桥杯历届试题-回文数字 (C语言代码)最简洁的解法(对应解法一)

                                                [历届试题]回文数字 (时间复杂度比优质题解的要低)(对应解法二)


解题思路:
        都是用遍历,回文数字的判定和回文数字数位和与输入数字是否相等的判定。

        解法一是将五位数和六位数全遍历一遍;而解法二只遍历五位数或六位数的第一位和第二位,第三位由输入数字n和第一二位的数字决定,降低了时间复杂度。
注意事项:
        没有满足条件的,输出:-1 。其他详见代码注释。

参考代码:

解法一:

#includeint main(){
    int n,i,flag=1;
    scanf("%d",&n);

    for(i=10000;i0)
        {
            num=num*10+t%10;
            sum+=t%10;
            t/=10;
        }//循环结束后num就等于i的倒序数字,如果num和i相等则i是回文数字
        if(num==i&&sum==n)//sum进行数位和的计算
        {
            flag=0;
            printf("%d\n",i);
        }
    }
    if(flag)
        printf("-1");
    return 0;
}//五位数和六位数的全部遍历,对计算机来说也用不了太多时间


解法二:

#includeint main()
{
    int n,flag=1;
    scanf("%d",&n);
    int i,j,k;
    for(i=1;i<=9;i++)
        for(j=0;j=0)&&(k<10))
            {
                flag=0;
                printf("%d%d%d%d%d\n",i,j,k,j,i);
            }
        }
    for(i=1;i<=9;i++)
        for(j=0;j=0)&&(k/2<10))//六位数的时候这里的k实际上最中间的两个数的和,一个数的二倍一定是偶数,所以k一定是偶数。
                {
                flag=0;
                printf("%d%d%d%d%d%d\n",i,j,k/2,k/2,j,i);
            }
        }
        if(flag)
            printf("-1");
    return 0;
}//两重循环第一二位,第三位利用n和一二位求得,先进行五位数的判断,再进行六位数的判断



为什么提交的时候标题太短会刷新啊,害得我重新打了一遍!呜呜呜!!!

 

0.0分

6 人评分

  评论区

为什么我这个总说超时呀,求求大佬帮帮我
2022-02-08 21:33:35
#include<stdio.h>
int huiwen(int n)
{
    int x, s = 0;
    x = n;
    while (1)
    {
        s = s * 10 + x % 10;
        x = x / 10;
        if (s == n)
        {
            return 1;
            break;
        }
    }

}

int main()
{
    int sum, i;
    scanf("%d", &sum);
    for (i = 10000; i < 1000000; i++)
    {
        if (huiwen(i) == 1)
        {
            if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum)
                printf("%d", i);
            else if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum)
                printf("%d", i);
            else
2022-02-08 21:32:48
  • «
  • 1
  • »