• 数组与字符串的习题


    WERTYU

    1. 常量数组:并不需要指明大小,编译器可以完成计算

    回文词

    1. 使用常量数组
    2. 不会输入空格,可以安全的使用scanf
    3. isalpha, idigit, isprint...在ctype.h中定义,toupper, tolower等工具可以用来转换大小写。

    猜数字游戏

    1. scanf("%d",&a[i]);

     生成元

      x+x的各个数字之和得到y,说明x是y的生成元,给出n(1,100000),求最小生成元。无解输出0;

    1. 只需要一次枚举100000内的所有正整数,标记"m+m的各个数字之和得到的数有一个生成元是m",最后查表
    2. 即找出这个数是哪个数的最小生成元。
    3. #include<stdio.h>
      #include<string.h>
      #define maxn 1000005
      int ans[maxn];
      int main()
      {
          int T,n;
          memset(ans,0,siezeof(ans));
          for(int m=1;m<maxn;m++)
          {
              int x=m,y=m;
              while(x>0)
              {
                  y+=x%10;
                  x/=10;
              }
              if(ans[y]==0||m<ans[y])    
                  ans[y]=m;
          }    
          scanf("%d",&T);
          while(T--)
          {
              scanf("%d",&n);
              printf("%d
      ",ans[n]);
          }
          return 0;
      }

    环状序列

    1. Q: 长度为n(n<=100)的环状DNA串(只含A,C,G,T),任务:输出改环状串的最小表示。
    2. 字典序:字符串在字典中的顺序,对于两个字符串,
      1. 第一个位置开始比较,某个位置字符不同时,字符较小的串,字典序较小
      2. 较短的字符串的字典序小(hi<history)
    3. #include<stdio.h>
      #include<string.h>
      #define maxn 105
      
      //判断p是否比q的字典序小 
      int less(const char*s,int p,int q)
      {
          int n=strlen(s);
          for(int i=0;i<n;i++)
          {
              if(s[(p+i)%n]!=s[(q+i)%n])            //如果遇到字符不同,就进行判断; 
              {                                    //注意,循环的可以用"...%n"来进行循环。 
                  return (s[(p+i)%n<s[(q+i)%n]]);            //如果p<q,就返回1,其他情况返回0; 
              }
           } 
           return 0;
      }
      
      int main()
      {
          int T;
          char s[maxn];
          scanf("%d",&T);
          while(T--)
          {
              scanf("%s",s);
              int ans=0;
              int n=strlen(s);
              for(int j=0;j<n;j++)
              {
                  if(less(s,j,ans))        //不断判断更新ans的值 
                      ans=j;
              }
              for(int i=0;i<n;i++)
              {
                  putchar(s[(i+ans)%n]);        //用putchar一个个输出字符 
              }
              putchar('
      ');
          }
          return 0;
      }
    4.   注意有putchar(),和用"%n"来循环
  • 相关阅读:
    [HIHO1223]不等式(离散化,枚举)
    [NYIST15]括号匹配(二)(区间dp)
    [HIHO1328]逃离迷宫(bfs,位压)
    [Topcoder]AvoidRoads(dp,hash)
    [POJ1159]Palindrome(dp,滚动数组)
    [Topcoder]ZigZag(dp)
    [NYIST32]组合数(状压,枚举,暴力)
    [NYIST737]石子合并(一)(区间dp)
    [HIHO1322]树结构判定(并查集)
    [HIHO1143]骨牌覆盖问题·一(矩阵快速幂,递推)
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/10727056.html
Copyright © 2020-2023  润新知