RNQOJ Jam的计数法
題目:https://www.rqnoj.cn/problem/3
?
?
非遞歸做法:(嚴(yán)格遞增 單調(diào)大于 不可等于 ?)
做法:循環(huán)體
? ? ? ? ?<1>操作字符串 str 從后往前找,k=1,如果s[w-k]!=t+'a'即最后一個元素存在后繼,則將最后一個字母+1,得到一個新字符串?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果s[w-k]==t+'a' 則將k++,t--繼續(xù)這個循環(huán) 直到找到新的字符串 或者w-k<0
? ? ? ? ?<2>輸出新字符串的值str 并將k t值還原
?
問題思路: 1、假設(shè)一開始的字符串為s
? ? ? ? ? ? ? ? 2、經(jīng)過一系列操作(一段代碼K),找到了s的下一個字符串s1
? ? ? ? ? ? ? ? 3、然后將s1賦給s,并還原初始條件
? ? ? ? ? ? ? ? 2、s(值為s1) 又經(jīng)過一系列操作(代碼K),找到了s(值為s1)的下一個字符串s2
? ? ? ? ? ? ? ? 3、然后將s2賦給s,并還原初始條件
?
? ? ? ? ? ? ?循環(huán)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; }?
?
?
遞歸做法:
轉(zhuǎn)載于:https://www.cnblogs.com/wshyj/p/6349874.html
總結(jié)
以上是生活随笔為你收集整理的RNQOJ Jam的计数法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7卸载打印机驱动
- 下一篇: canvas剪辑区域