• RNQOJ Jam的计数法


    题目:https://www.rqnoj.cn/problem/3

    非递归做法:(严格递增 单调大于 不可等于  )

    做法:循环体

             <1>操作字符串 str 从后往前找,k=1,如果s[w-k]!=t+'a'即最后一个元素存在后继,则将最后一个字母+1,得到一个新字符串 

                                                             如果s[w-k]==t+'a' 则将k++,t--继续这个循环 直到找到新的字符串 或者w-k<0

             <2>输出新字符串的值str 并将k t值还原

    问题思路: 1、假设一开始的字符串为s

                    2、经过一系列操作(一段代码K),找到了s的下一个字符串s1

                    3、然后将s1赋给s,并还原初始条件

                    2、s(值为s1) 又经过一系列操作(代码K),找到了s(值为s1)的下一个字符串s2

                    3、然后将s2赋给s,并还原初始条件

                 循环2,3

                    

                                           

    # include<iostream>
    using namespace std;
    int main()
    {
        char str[30];
        int s,t,w,k=1,flag=0,i,j=5;
        cin>>s>>t>>w>>str;
        int n = t;
        while(j>0)
        {
                if(str[w-k]!='a'+t-1)   //功能:寻找一个新的字符串 //属于操作2
                {
                    str[w-k] = str[w-k]+1;
                    for(i=w-k+1;i<w;i++)
                    {
                        str[i] = str[i-1]+1;
                    }
                    flag=0; //找到新的字符串才能输出
                }
                else                                     //属于操作2
                {
                    k++;  //找不到就往前找一位
                    t--;  //改变后继判断的值即 t-1+'a'的值
                    flag=1;  //此时仍属于在寻找新字符串的过程 不输出
                    if(w-k<0) //提前终止的判断
                    {
                        break;
                    }
                }
                
                if(flag==0)                              //属于操作3
                {
                    cout<<str<<endl; //输出新找到的字符串
                    k=1; //将k,t值还原,即还原初始条件 将新字符串看作
                    t=n;
                    flag=1; //为了避免没再次找到新字符串 就输出
                    j--;
                }
                
                
        }
        return 0;
    } 

    递归做法:

  • 相关阅读:
    微信小程序tab(swiper)切换
    微信小程序如何动态增删class类名
    Vi (Unix及Linux系统下标准的编辑器)VIM (Unix及类Unix系统文本编辑器)
    js 阻止事件冒泡和默认行为 preventDefault、stopPropagation、return false
    H5中的touch事件
    CSS3 Gradient 渐变
    CSS3动画属性Transform解读
    你所不知的 CSS ::before 和 ::after 伪元素用法
    javascript移动设备Web开发中对touch事件的封装实例
    那些过目不忘的H5页面
  • 原文地址:https://www.cnblogs.com/wshyj/p/6349874.html
Copyright © 2020-2023  润新知