1:算法思路
①对数字串从后向前找第一个降序,记录位置Ai
②再次从后向前找第一个比Ai大的数,与Ai位置的数交换
③将Ai位置以后的数字串逆序
2:实例
①求839674521的字典后序
②从后向前扫描到第一个降序为4
③再次从后扫描找到第一个比4大的数5
④将4和5交换,并且最后三位逆序,得到839675124
3:代码实现,只具备基本功能
1 #include <IOSTREAM> 2 using namespace std; 3 int main() 4 { 5 int MaxSize= 0; //数组大小,初始化为0 6 cout<<"请输入数字串的位数:"<<endl; 7 cin>>MaxSize; //改变n的大小 8 int* Array= new int[MaxSize]; //创建大小为n的数组 9 cout<<"请输入"<<MaxSize<<"位数字串:"<<endl; 10 int Ai=0;//第一个位置 11 //////////////////////////////////// 12 //数组初始化 13 //////////////////////////////////// 14 for (int i=0;i<MaxSize;i++) 15 { 16 cin>>Array[i]; 17 } 18 ///////////////////////////////////////////////////////////// 19 ///*字典序算法 20 for (int p=MaxSize-2;p>=0;p--) 21 { 22 if (Array[p]<Array[p+1]) 23 { 24 Ai=p; 25 for (int k=MaxSize-1;k>p;k--) 26 { 27 if (Array[p]<Array[k]) 28 { 29 int temp; 30 temp=Array[p]; 31 Array[p]=Array[k]; 32 Array[k]=temp; 33 break; 34 } 35 } 36 break; 37 } 38 } 39 //*/ 40 ////////////////////////////////////////////// 41 /////数组输出 42 ///////////////////////////////////////////// 43 for (int m=0;m<=Ai;m++) 44 { 45 cout<<Array[m]; 46 } 47 for (int k=MaxSize-1;k>Ai;k--) 48 { 49 cout<<Array[k]; 50 } 51 cout<<endl; 52 return 0; 53 }
4:运行演示
5:心得
通过这个简单的程序题,意识到了自己对编程的不足和迷茫,感谢33zeng无私的调试程序。加油!!!!