鱼C论坛

 找回密码
 立即注册
查看: 1141|回复: 3

[已解决]7-3 最小回文素数

[复制链接]
发表于 2022-3-19 17:14:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 学鸣 于 2022-3-19 17:14 编辑

求大佬们帮个忙
大一刚学,自己想了半天,输入格式不会搞,请各位解一下题,能完整解答更好
QQ截图20220319170709.png
最佳答案
2022-3-19 17:32:10
  1. #include <stdio.h>

  2. int is_prime(int x)
  3. {
  4.     for (int i = 2; i < x / 2; i++)
  5.     {
  6.         if (x % i == 0)
  7.         {
  8.             return 0;
  9.         }
  10.     }
  11.     return 1;
  12. }

  13. int is_palindromes(int x)
  14. {
  15.     int m = 0, s = 0, n;

  16.     s = x;
  17.     while (s != 0)
  18.     {
  19.         n = s % 10;
  20.         m = m * 10 + n;
  21.         s = s / 10;
  22.     }

  23.     return x == m;
  24. }

  25. int main()
  26. {
  27.     int T;

  28.     scanf("%d", &T);

  29.     int array[T];
  30.     int result[T];

  31.     for (int i = 0; i < T; i++)
  32.     {
  33.         scanf("%d", &array[i]);

  34.         if (array[i] > 65535)
  35.         {
  36.             printf("ERROR");
  37.             return 0;
  38.         }

  39.         int j = 0;
  40.         while (!is_prime(array[i] + j) || !is_palindromes(array[i] + j))
  41.         {
  42.             j++;
  43.         }
  44.         result[i] = array[i] + j;
  45.     }

  46.     for (int i = 0; i < T; i++)
  47.     {
  48.         printf("%d\n", result[i]);
  49.     }

  50.     return 0;
  51. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-19 17:32:10 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +20 鱼币

  1. #include <stdio.h>

  2. int is_prime(int x)
  3. {
  4.     for (int i = 2; i < x / 2; i++)
  5.     {
  6.         if (x % i == 0)
  7.         {
  8.             return 0;
  9.         }
  10.     }
  11.     return 1;
  12. }

  13. int is_palindromes(int x)
  14. {
  15.     int m = 0, s = 0, n;

  16.     s = x;
  17.     while (s != 0)
  18.     {
  19.         n = s % 10;
  20.         m = m * 10 + n;
  21.         s = s / 10;
  22.     }

  23.     return x == m;
  24. }

  25. int main()
  26. {
  27.     int T;

  28.     scanf("%d", &T);

  29.     int array[T];
  30.     int result[T];

  31.     for (int i = 0; i < T; i++)
  32.     {
  33.         scanf("%d", &array[i]);

  34.         if (array[i] > 65535)
  35.         {
  36.             printf("ERROR");
  37.             return 0;
  38.         }

  39.         int j = 0;
  40.         while (!is_prime(array[i] + j) || !is_palindromes(array[i] + j))
  41.         {
  42.             j++;
  43.         }
  44.         result[i] = array[i] + j;
  45.     }

  46.     for (int i = 0; i < T; i++)
  47.     {
  48.         printf("%d\n", result[i]);
  49.     }

  50.     return 0;
  51. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-3-19 17:59:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-19 20:11:07 | 显示全部楼层

回帖奖励 +20 鱼币

本帖最后由 jhq999 于 2022-3-19 22:15 编辑
  1. int outmin(int innum)
  2. {
  3.         innum++;
  4.         int len=0,num=innum,i=0;
  5.         while (num)len++,num/=10;
  6.         int *fj=new int[len];
  7.         num=innum;
  8.         for (i=0;i<len;i++)
  9.         {
  10.                 fj[len-1-i]=num%10;
  11.                 num/=10;
  12.         }
  13.         a=len/2+len%2;
  14.         for (i = 0; i < len/2; i++)
  15.         {
  16.                         
  17.                          if(fj[len/2-i-1]<fj[a+i])
  18.                         {
  19.                                 fj[a-1]++;
  20.                                 break;
  21.                         }
  22.         }
  23.        
  24.         for (i = 0; i < len/2; i++)fj[len-i-1]=fj[i];
  25.         for (i = 0,num=0; i < len; i++)num=num*10+fj[i];
  26.         delete[] fj;
  27.         return num;
  28. }
  29. int main()
  30. {
  31.         int n=0,*innum=NULL,i=0;
  32.         scanf("%d",&n);
  33.         innum=new int[n];
  34.         for (i = 0; i < n; i++)
  35.         {
  36.                 scanf("%d",innum+i);
  37.                 innum[i]=outmin(innum[i]);
  38.                
  39.         }
  40.         for (i = 0; i < n; i++)
  41.         {
  42.                 printf("%d\n",innum[i]);
  43.         }
  44.         delete[] innum;
  45.         return 0;

  46. }
复制代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int outmin(int innum)
  4. {
  5.         innum++;
  6.         int len=0,num=innum,a=0,b=0,c=0,i=0;
  7.         while (num)len++,num/=10;

  8.         num=innum;
  9.         b=1;
  10.         for (i=0;i<len/2;i++)
  11.         {

  12.                 num/=10;
  13.                 b*=10;
  14.         }
  15.         c=b;
  16.         b=innum-num*b;
  17.         innum=len%2?num/10:num;
  18.         a=0;
  19.         for (i=0;i<len/2;i++)
  20.         {
  21.                 a=a*10+innum%10;
  22.                 innum/=10;
  23.         }
  24.         if (b>a)
  25.         {
  26.                 num++;
  27.         }
  28.        
  29.         num=num*c+a;
  30.         return num;
  31. }
  32. int main()
  33. {
  34.         int n=0,*innum=NULL,i=0;
  35.         scanf("%d",&n);
  36.         innum=new int[n];
  37.         for (i = 0; i < n; i++)
  38.         {
  39.                 scanf("%d",innum+i);
  40.                 innum[i]=outmin(innum[i]);
  41.                
  42.         }
  43.         for (i = 0; i < n; i++)
  44.         {
  45.                 printf("%d\n",innum[i]);
  46.         }
  47.         delete[] innum;
  48.         return 0;

  49. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 20:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表