C语言判断回文数:c语言中的回文序列(palindrome sequence)

我需要帮助在 c 中编写代码。我需要在给定的序列中找到一个 int 的给定长度的回文。像这样:长度为 3 和序列为 3846401 这里是 464 或:长度 4 和序列:34000003 这里是 0000

我真的需要一些建议,我已经尝试了几个小时,无法做到这一点。

编辑后:是的,我理解所有的 downvotes,我一般寻找一些建议。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int s;
int k;
int module;
int last;
int y;
int t=1;
int counter=0;
#define N 10
   
int main() {
    printf("Please enter a length:\n");
    scanf("%d",&s);
    printf("Please enter a sequence:\n");
    scanf("%d",&k);
    int x =k;
    while(x>0) {
        x = x/10;
        y++;
    }
    int sequence[N];
    int last_array[N];
    for(int i=0; i<1;i++){
        last_array[i]=-1;
    }
    for(int i=0; i < y; i++){
        module= k%10;
        sequence[i] = module;
        k=k/10;
    }
    for(int i=0; i < y; i++){
        if( counter<s&&sequence[i]==sequence[i+s-t]){
                last_array[counter]=sequence[i];
                t=2+t;
                counter++;
        }
    }
    if(last_array[0]==-1){
        printf("There is no such palindrome.\n");
    }
    else{
        printf("The requested palindrome is: ");
        for(int i=0; i<s; i++){
            printf("%d",last_array[i]);
        }
    }
    return 0;
}
1

我得到了 downvoters 的观点,但似乎你很失落。因为你没有发布你的任何代码,我也不会发布任何代码,直到你这样做。我只会尝试解释你将如何处理任务。

一般来说,有一些方法可以确定数组的子集是否是回文。在我看来,最容易理解的一个如下。

假设你有一个这样的数组:[3,8,4,6,4,0,1]

如果要查找长度为 3 的回文,则可以将输入数组划分为长度为 3 的较小的子数组。在上面的示例中,您将有 5 个可能的子数组,其长度为所需回文的长度:

[3,8,4][8,4,6][4,6,4][6,4,0][4,0,1]

如您所见,第 3 个是此示例的有效回文。现在如何确定何时存在有效回文?基本上,您遍历所有可能的子数组,将当前子数组分成两半,并检查左半部分的所有数字是否与右侧的数字相同。如果左侧的一个数字不等于右侧的相应数字,则您知道它不可能是回文。如果,对于每个数字,

为了帮助您可视化,我们将开始定义为“s”,结束定义为“e”:

这是一个奇数阵列,在这种情况下,第三个子阵列的例子。

第一次迭代:

 s   e
 |   |
 v   v
[4,6,4] start=4, end=4 <- They are both the same

第 2 次迭代(如果不均匀,则开始和结束落在同一数字上):

  s/e
   |
   v
[4,6,4] start=6, end=6 <- equal again

对于一个甚至任意数组,它看起来像这样:

第一次迭代:

 s         e
 |         |
 v         v
[4,6,1,1,6,4] start=4, end=4 <- equal

第二次迭代:

   s     e
   |     |
   v     v
[4,6,1,1,6,4] start=6, end=6 <- equal

第三次迭代:

     s e
     | |
     v v
[4,6,1,1,6,4] start=1, end=1 <- equal and finish

如果在某些时候它们不相等,再次,你知道它不可能是回文。

编程你会有两个循环。外循环遍历所有可能的子数组,第二个循环比较元素。如果第二个循环在某个时候确定 s 和 e 不一样,你知道它不是回文,可以继续下一个子数组。

我希望现在更清楚一点,如果你能澄清你实际上被困在哪里会更容易,因为没有人能知道你有什么样的编程经验。

-1

u 可以通过以下代码在 python中检查集合中是否有回文子集:

nums = list(map(int, input().split()))
flag = False
for j in range(len(nums)):
    for k in range(j + 2, len(nums)):
        if nums[j] == nums[k]:
            flag = True
            break
if flag == True:
    print("YES")
else:
    print("NO")

解释:如果列表中的第一个和最后一个项目是相同的,那么它将是一个回文。

例如:如果我们有一个这样的列表 [1,2,2,1]

j =0

k = 0 + 2,跳过它们之间的第二个数字

如果 nums [j] = = nums [k]列表中的第一个和最后一个项目,那么它将是回文。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(392)
Centimeters:PHP厘米到英尺(5.9 feet in centimetres)
上一篇
Catpart文件:CatiaCATProduct和CATPart文件格式
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(68条)