8、假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文, ‘abcde’和‘ababab’则不是回文。 试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。 (要求:同时使用栈和队列两种结构)

题目

8、假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文, ‘abcde’和‘ababab’则不是回文。 试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。 (要求:同时使用栈和队列两种结构)


相似考题
更多“8、假设称正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文, ‘abcde’和‘ababab’则不是回文。 试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。 (要求:同时使用栈和队列两种结构)”相关问题
  • 第1题:

    请编写函数fun(),该函数的功能是判断字符串是否为回文,若是则函数返回1,主函数中输出YES:否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。

    例如:字符串LEVEL是回文,而字符串123312就不是回文。

    注意;部分源程序已存在文件test26_.cpp中。

    请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。

    文件test26_2.cpp的内容如下:

    include<iostream.h>

    include<stdio.h>

    define N 80

    int fun(char*str)

    {

    }

    void main()

    {char s[N];

    cout<<"Enter a string:"<<endl;

    gets{s);

    cout<<"\n\n";

    puts(s);

    if(fun(s))

    cout<<"YES\n";

    else

    cout<<"NO\n";

    }


    正确答案:int fun(char*str) {int in=Ofg=1; char*p=str; while(*p) {n++; p++;} for(i=0;in/2;i++) if(str[i]==str[n-1-i]) ; else {fg=O;break;} return fg; }
    int fun(char*str) {int i,n=O,fg=1; char*p=str; while(*p) {n++; p++;} for(i=0;in/2;i++) if(str[i]==str[n-1-i]) ; else {fg=O;break;} return fg; } 解析:解答本题的主要思路是:首先要利用循环中指针的移动来求得字符串的长度n,然后用一个for循环依次取得数组中的前半部分元素,用取得的前半部分内的元素逐个与后半部分内的对应位置的元素进行比较,如果相同,不做任何工作,接着取下一个元素,继续比较:如果不相同,可以判断该字符串肯定不是回文,就给标志变量fg赋值0(fg的初始值为1)。最终把fg作为函数的返回值返回(fg值为1表明是回文,fg值为0表明不是回文)。

  • 第2题:

    函数check()用来判断字符串s是否是“回文”(顺读和倒读都一样的字符串称为“回文”,如abcba)。若是回文,函数返回值为1;否则返回值为0。请完成此函数的定义。

    注意:部分源程序已存在考生文件夹的文件PROC7.cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数check()的花括号中填写若干语句。

    文件PROC7.cpp的内容如下:

    //PROC7.cpp

    include<iostream>

    include<string>

    using namespace std;

    int check(char*s);

    int main()

    {

    char str[100],*p;

    cout<<"Input your string!";

    cin>>str;

    p=str;

    cout<<"The result is:"<<check(p)<<end1;

    }

    int check(char*s)

    {

    // * * * * + * * *

    }


    正确答案:

  • 第3题:

    阅读以下说明和C程序代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。

    函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。

    【C程序代码】

    include <stdio.h>

    include <stdlib.h>

    int isPalm(long m)

    { /*判断m是否为回文数*/

    int i = 0, k = 0;

    char str[32];

    while (m > 0) { /*从个位数开始逐个取出m的各位数字并存入字符数组str*/

    str[k++] =(1)+ '0';

    m = m / 10;

    }

    for(i = 0; i < k/2; i++) /*判断str中的k个数字字符序列是否是回文*/

    if ( str[i] != str[(2)] ) return 0;

    return 1;

    }

    int main ( )

    {

    long n, a, t;

    printf("input a positive integer:"); scanf("%ld",&n);

    if (n < 100 || n > =1000) return -1 ;

    while((3)) { /*n不是回文数时执行循环*/

    printf("%ld-> ", n);

    for(a = 0, t = n; t > 0; ) { /*计算n的反序数并存入a*/

    a =(4)*10 + t % 10; t = t / 10;

    } /*end of for*/

    n =(5); /*与反序数求和*/

    } /*end of while*/

    printf ("%id\n",n);

    system("pause"); return 0;

    }


    正确答案:(1) m%10或其等价表示 (2) k-1-i (3) !isPalm(n)或isPalm(n)!=1或isPalm(n)= =0 (4) a (5) n+a
    (1) m%10,或其等价表示 (2) k-1-i (3) !isPalm(n),或isPalm(n)!=1,或isPalm(n)= =0 (4) a (5) n+a 解析:本题考查C程序设计的基本能力。
    函数isPalm(long m)的功能是判断m是否为回文数,其方法是先将m的各位数字依次取出转换为对应的数字字符保存在数组str中,然后再判断str中的字符序列是否对称。代码如下:
    while(m>0){/*从个位数开始逐个取出m的各位数字并存入字符数组str*/
    str[k++] = m %10 +'0';
    m=m/10;
    }
    因此,空(1)处应填入“m%10",将数m的个位数字取出。以上while循环结束时,k的值即为m取初始值时的位数。
    若需判断str[0]、str[1]、…、str[k-1]中的k个数字字符序列是否对称,则应依次比较str[0]与str[k-1]、str[1]与str[k-2]、…str[k/2-1]与str[k2+1]是否相等,若都相等,则是回文数;若其中有一处不等,则不是回文数。代码如下:
    for(i=0;ik/2;i++)
    if ( str[i] !=str[(2)] )return 0;
    因此,空(2)处应填入“k-1-i”。
    根据题目描述,从最初输入的数开始,直到得到一个回文数时结束,因此对于数n,调用函数is Palm(n),根据返回值确定n是否为一个回文数,空(3)处应填入“!isPalm(n)”。
    为了求一个数t的反序数,可从其个位数字开始,依次取出其各位数字并进行组合。下面以t=345举例说明通过整除取余“%”、整除“/”取出各位数字并组合出543的过程。
    初始时:a=0t=345
    下一步:345%10=>5a*10+5=>a=5t/10=345/10=>t=34
    下一步:34%10=>4a*10+4=>a=54t/10=34/10=>t=3
    下一步:3%10=>3a*10+3=>a=543t/10=3/10=>t=0
    因此,可知空(4)处应填入“a”。
    最后数n与其反序数a相加得到新的数,继续产生回文数的过程。空(5)处应填入“n+a”。

  • 第4题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【函数1说明】

    函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串。若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。

    【函数1】

    int palindrome(char s[]{

    char *pi, *pj;

    pi=s; pj=s+strlen(s)-1;

    while(pi<pj&&(1)){

    pi++; pj--;

    }

    if((2))return-1;

    else return 0;

    }

    【函数2说明】

    函数f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。

    例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。

    【函数2】

    void f(char *str, char del){

    int i,j, len;

    len=strlen(str);

    i=0;

    while(i<len){

    While((3)) i++; /*忽略连续的标志字符*/

    /*寻找从str[i]开始直到标志字符出现的一个子字符串*/

    j=i+1;

    while(str[j]!=del && str[j]!='\0')j++;

    (4)='\0'; /*给找到的字符序列置字符串结束标志*/

    printf("%s\t",&str[i]);

    (5);

    }

    }


    正确答案:(1)*pi==*pi (2)pipj或*pi!=*pj (3)str[i]==del (4)str[j] (5)i=j+1
    (1)*pi==*pi (2)pipj或*pi!=*pj (3)str[i]==del (4)str[j] (5)i=j+1 解析:本题考查在C语言中对字符串的处理。
    【函数1】
    使用数组s[n]来存储一个字符串,因为要根据回文字符串的定义来判断一个串是否是回文字符串,所以需要循环比较。
    (1)拿该字符串的第一个元素s[0]和最后一个元素s[n-1]比较,如果s[0]不等于s[n-1],则s不是回文字符串。
    (2)如果s[0]等于s[n-1],则拿第二个元素s[1]和倒数第二个元素s[n-2]比较,如果 s[1]不等于s[n-2],则s不是回文字符串。
    (3)依次类推,直到最中间的两个元素也比较完毕(如果s有偶数个元素),或者只剩下中间的一个元素(如果s有奇数个元素)。
    当上述循环结束时,如果最中间的元素没有进行比较,就说明s不是回文字符串;如果进行了比较,则s是回文字符串。
    在函数1中,pi和pj是两个指向字符的指针,程序首先将s的首地址赋给pi(即*pi =a[0]),将元素s[strlen(s)-1]的地址赋给pj(即*pj=s[strlen(s)-1]),当pipj并且pi和pj所指向的值相等时进行循环:pi自增,pj自减。
    退出循环后,如果pipj,则s是回文字符串(如果s有偶数个元素,则为pi>pj;如果s有奇数个元素,则为pi=pj);如果pipj,则s不是回文字符串。
    【函数2】
    由函数2说明可知,此函数对给定的字符串进行从左至右的扫描,找出不包含标志字符的子字符串。
    在函数2中,i的初值为0,len表示字符串的长度。当ilen时进行循环:如果当前字符是标志字符,则不作处理,继续扫描。当退出该循环时,当前字符str[i]不是标志字符,这时从str[i]开始寻找,直到找到在标志字符中出现的一个子字符串(i保持不变,用i标记寻找的过程),给找到的字符序列置字符串结束标志,以便于后面语句的输出。
    输出语句结束后,就要继续寻找后面的不包含标志字符的子字符串,这时,需要把指针i移动至j的后面,继续扫描。

  • 第5题:

    7:03:07这个时间是1一个很奇特的时间,它不管正读还是倒读都是“70307”,我们称之为“回文时间”。请问一天中,有多少个这样的“回文时间”。

    A.360

    B.600

    C.660

    D.684


    正确答案:C

  • 第6题:

    试题3

    本程序中,函数fun的功能是判断字符串是否是回文,若是回文,则返回1,主函数中输出YES;否则,函数返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而123312就不是回文。请在函数fun的花括号中填入你编写的若干语句。(注意:不改动程序的结构,不得增行或删行。)

    #include <stdio.h>

    #define N 80

    int fun ( char *str)

    {

    }

    main()

    { char s[N];

    printf(“Enter a string : ”) ;

    gets (s) ;

    printf(“\n\n”) ;

    puts (s) ;

    if (fun (s))

    printf (“YES\n”) ;

    else

    printf (“N0\n”) ;

    nono ();

    }

    nono ()

    {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件.*/

    int i;

    FILE *rf, *wf ;

    char s[N] ;

    rf = fopen (“bc.in”,“r”) ;

    wf = fopen (“bc.out”,“w”) ;

    for ( i=0; i<10; i++ )

    { fscanf (rf, “%s”,s ) ;

    if (fun ( s ))

    fprintf (wf, “%s YES\n”, s ) ;

    Else

    fprintf(wf, “%s NO\n”, s ) ;

    }

    fclose (rf) ;

    fclose (wf) ;

    }


    正确答案:
    试题3分析
    **********************
    本题中函数的功能是判断字符串是否是回文,若是回文,则返回1;否则,函数返回0。
    要判断字符串是否是回文,我们可以将首尾两边字符进行比较,如果想等,则是回文,如果有不等的情况,说明不是回文;
    试题3答案
    *************************
    完整的fun函数如下。
    int  fun ( char  *str )
      { int  i,j,k;
        j=strlen (str);
        k=1;
        for (i=0;i<j/2-1;i++)
          if(* (str+i) != * (str+j-i-1))
            { k=0;
             break;
            }
         return (k) ;
       }

  • 第7题:

    回文序列


    正确答案: DNA片段上的一段所具有的反向互补序列,常是限制性酶切位点。

  • 第8题:

    下列DNA序列属于回文结构的是()。

    • A、GAAACTGCTGTTTC
    • B、GAAACTGGTCAAAG
    • C、GAAACTGGTCTTTC
    • D、GAAACTGCAGTTTC

    正确答案:B

  • 第9题:

    关于回文字符串,描述正确的是()。

    • A、回文字符串的长度一定是奇数
    • B、回文字符串的长度一定是偶数
    • C、回文字符串的长度可以是奇数也可以是偶数
    • D、回文字符串只要求首尾字母是一样的

    正确答案:C

  • 第10题:

    多选题
    以下字符串中,是回文字符串的是()。
    A

    abcba

    B

    12321

    C

    1221

    D

    abcdef


    正确答案: D,C
    解析: 暂无解析

  • 第11题:

    单选题
    关于回文字符串,描述正确的是()。
    A

    回文字符串的长度一定是奇数

    B

    回文字符串的长度一定是偶数

    C

    回文字符串的长度可以是奇数也可以是偶数

    D

    回文字符串只要求首尾字母是一样的


    正确答案: C
    解析: 暂无解析

  • 第12题:

    多选题
    回文字符串是正反都一样的英文字符串,那么下面不属于回文字符串的是()。
    A

    aabb

    B

    aabbccdd

    C

    ABCABC

    D

    AABBB


    正确答案: D,C
    解析: 暂无解析

  • 第13题:

    请补充函数fun(),该函数的功能是判断一个数是否为回文数。当字符串是回文时,函数返回字符申:yes!,否则函数返回字符串:no!,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如:abcba。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<string.h>

    include<stdio.h>

    char *fun(char*str)

    {

    char *p1,*p2;

    int i, t=0;

    p1=str;p2=str+strlen(str)-1;

    for (i=0;【 】;i++)

    if(【 】)

    {

    t=1;

    break;

    }

    if (【 】)

    return("yes!");

    else

    return("no!");

    }

    main()

    {

    char str[50];

    printf("Input;");

    scanf("%s",str);

    printf("%s\n",fun(str));

    }


    正确答案:i=strlen(sb)/2或istrlen(sw)/2 *p1++!=*p2-- t==20
    i=strlen(sb)/2或istrlen(sw)/2 *p1++!=*p2-- t==20 解析:第一空:判断回文数就是将第一个字符与最后—个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都是相同,则这个字符串就是回文数,否则不是。所以比较的次数是strlen(str)/2。第二空:指针p1从第一个字符向后移动,指针p2从最后一个字符向前移动,如果两字符不相同,则说明此字符串不是回文数,将标记变量t置为1。第三空:变量t用来标记此字符串是否为回文数,当t为0时,表示字符串是回文数,当t为1时,表示字符串不是回文数。

  • 第14题:

    给定程序中,函数fun的功能是:判断形参s所指字符串是否是”回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。”回文”是正读和反读都一样的字符串:不区分大小写字母)。

    例如,LEVEL和Level是”回文”,而LEVLEV不是”回文”。

    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

    注意:源程序存放在考生文件夹下的BLANK.1.C中。

    不得增行或删行,也不得更改程序的结构!


    正确答案:(1)s (2)-- (3)return O
    (1)s (2)-- (3)return O 解析:函数fun的功能是:判断形参s所指字符串是否是”回文”,即比较第一个字符和最后一个字符是否相同,第二个字符和倒数第二个字符是否相同,依此类推,可以用循环来实现。

  • 第15题:

    写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1


    正确答案:
     

  • 第16题:

    7:03:07这个时间是一个很奇特的时间,它不管正读还是倒读都是“70307”。我们称之为“回文时间”。请问一天中,有多少个这样的“回文时间”? A.360 B.600 C.660 D.684


    正确答案:C
    回文时间分为“a:bc:ba”和“ab:cc:ba”这两种形式。
    “a:bc:ba”形式:a可以取0~9这10种情况,b可以取0~5这6种情况,c可以取0~9这10种情况,一共有10x6x10=600个“回文时间”:
    “ab:cc:ba”形式:a可以取1和2这两种情况.
    a=1,b可以取0~5这6种情况,C可以取0~5这6种情况,有6x6=36个“回文时间”;
    a=2,b可以取0~3这4种情况,C可以取0~5这6种情况,有4x6=24个“回文时间”。
    故一天有600+36+24=660个“回文时间”。

  • 第17题:

    7:03:07这个时间是一个很奇特的时间,它不管正读还是倒读都是“70307”,我们称之为“回文时间”。请问一天中,有多少个这样的“回文时间”?

    A.360

    B.600

    C.660

    D.684


    正确答案:C
    回文时间分为“a:bc:ba”和“ab:cc:ba”这两种形式。

  • 第18题:

    试题二(共 15 分)

    阅读以下说明和 C 程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    下面 C 程序代码的功能是:对于输入的一个正整数 n(100≤n<1000) ,先判断其是否是回文数(正读反读都一样的数) 。若不是,则将 n 与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278 不是回文数,其反序数为 872,相加后得到的 1150还不是回文数,再将 1150 与其反序数 511 相加,得到的 1661 是回文数。 函数 int isPalm(long m)的功能是:将正整数 m的各位数字取出存入数组中,然后判断其是否为回文数。若 m是回文数则返回 1,否则返回 0。

    [C 程序代码]

    #include <stdio.h>

    #include <stdlib.h>

    int isPalm(long m)

    { /*判断 m是否为回文数*/

    int i = 0, k = 0;

    char str[32];

    while (m > 0) { /*从个位数开始逐个取出 m的各位数字并存入字符数组 str*/

    str[k++] = (1) + '0';

    m = m / 10;

    }

    for(i = 0; i < k/2; i++) /*判断 str中的 k 个数字字符序列是否是回文*/

    if ( str[i] != str[ (2) ] ) return 0;

    return 1;

    }

    int main( )

    {

    long n, a, t;

    printf("input a positive integer:"); scanf("%ld",&n);

    if (n < 100 || n > =1000) return -1 ;

    while( (3) ) { /*n 不是回文数时执行循环*/

    printf("%ld -> ", n);

    for(a = 0, t = n; t > 0; ) { /*计算 n 的反序数并存入 a*/

    a = (4) *10 + t % 10; t = t / 10;

    } /*end of for*/

    n = (5) ; /*与反序数求和*/

    } /*end of while*/

    printf("%ld\n",n);

    system("pause"); return 0;

    }


    正确答案:


  • 第19题:

    所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1551,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。


    正确答案: ints,k;
    inti,j;
    int[]a=newint[20];
    boolpos;
    while(true)
    {
    s=-1;
    while(s<0)
    {
    Console.Write("请输入一个正整数或者只按一个数字0:");
    s=int.Parse(Console.ReadLine());
    if(s==0)return;
    }
    k=s;
    pos=true;
    i=-1;
    while(k>0)
    {
    i++;
    a[i]=k%10;
    k=k/10;
    }
    //注意:数组a的长度为(i+1)
    for(j=0;j<(i+1)/2;j++)
    if(a[j]!=a[i-j])
    {
    pos=false;
    break;
    }
    if(pos)Console.WriteLine("{0}是回文数。",s);
    elseConsole.WriteLine("{0}不是回文数。",s);
    }

  • 第20题:

    以下字符串中,是回文字符串的是()。

    • A、abcba
    • B、12321
    • C、1221
    • D、abcdef

    正确答案:A,B,C

  • 第21题:

    回文字符串算法,不可以判断一串汉字字符串是否是回文。


    正确答案:正确

  • 第22题:

    判断题
    回文字符串算法,不可以判断一串汉字字符串是否是回文。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第23题:

    多选题
    回文字符串是正反都一样的英文字符串,那么下面不是回文字符串的应为()。
    A

    XYZZ

    B

    XYZXYZ

    C

    XXMXX

    D

    MMNMMN


    正确答案: A,C
    解析: 暂无解析

  • 第24题:

    问答题
    所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1551,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。

    正确答案: ints,k;
    inti,j;
    int[]a=newint[20];
    boolpos;
    while(true)
    {
    s=-1;
    while(s<0)
    {
    Console.Write("请输入一个正整数或者只按一个数字0:");
    s=int.Parse(Console.ReadLine());
    if(s==0)return;
    }
    k=s;
    pos=true;
    i=-1;
    while(k>0)
    {
    i++;
    a[i]=k%10;
    k=k/10;
    }
    //注意:数组a的长度为(i+1)
    for(j=0;j<(i+1)/2;j++)
    if(a[j]!=a[i-j])
    {
    pos=false;
    break;
    }
    if(pos)Console.WriteLine("{0}是回文数。",s);
    elseConsole.WriteLine("{0}不是回文数。",s);
    }
    解析: 暂无解析