kiem tien, kiem tien online, kiem tien truc tuyen, kiem tien tren mang
Friday, November 11, 2011

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:
3
1 123
2 279134399742
3 987

Output:
1 132
2 279134423799
3 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

domain, domain name, premium domain name for sales

Popular Posts