Nguon:Suu tam
Trong bài này, bạn hãy viết chương trình nhận vào một chuỗi (có thể khá dài) các ký tự số và đưa ra màn hình hoán vị kế tiếp của các ký tự số đó (với ý nghĩa là hoán vị có giá trị lớn hơn tiếp theo nếu ta coi chuỗi đó là một giá trị số nguyên).
Chú ý: Các ký tự số trong dãy có thể trùng nhau.
Ví dụ:
123 -> 132
279134399742 -> 279134423799
Cũng có trường hợp sẽ không thể có hoán vị kế tiếp. Ví dụ như khi đầu vào là chuỗi 987.
Dữ liệu vào
Dòng đầu tiên ghi số nguyên t là số bộ test (1 ≤ t ≤ 1000). Mỗi bộ test có một dòng, đầu tiên là số thứ tự bộ test, một dấu cách, sau đó là chuỗi các ký tự số, tối đa 80 phần tử.
Dữ liệu ra
Với mỗi bộ test hãy đưa ra một dòng gồm thứ tự bộ test, một dấu cách, tiếp theo đó là hoán vị kế tiếp hoặc chuỗi “BIGGEST” nếu không có hoán vị kế tiếp.
Example
Input:31 1232 2791343997423 987
Output:1 1322 2791344237993 BIGGEST
#include<iostream.h>
#include<string.h>
using namespace std;
int main()
{
char a[82];
int slg;
cin>> slg;
for( int h =1;h<=slg;h++)
{
cin>>h;cin>>a;
int t =strlen(a)-1;
int i =t-1;
while( a[i] >= a[i+1]&& i>=0)i--;
if( i<0) cout<<h<< " BIGGEST" << endl;
else
{
int k =t;
while(a[i] >=a[k])k--;
int tmp = a[i]; a[i] =a[k];a[k] = tmp;
int s = i+1;
int r =t;
while( s<r)
{
tmp = a[s];
a[s] = a[r];
a[r] = tmp;
s++;r--;
}
cout<<h <<" ";
for(int j =0;j<=t;j++)
cout <<a[j];
cout<<endl;
}
}
//system("pause");
return 0;
}
0 comments:
Post a Comment