Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
uses crt;
var v,r:text;
s,s2:string;
a1,code,i,n,j,b:integer;
tam:string;
a:array[1..100] of string;
function kt(s:string):boolean;
var i:integer;
begin
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then kt:=true else begin exit(false); end;
end;
begin
assign(v,'xau.inp');
reset(v);
readln(v,n);
for i:=1 to n do read(v,a[i]);
assign(r,'xau.out');
rewrite(r);
for i:=1 to n-1 do
if kt(a[i]) then
for j:=i+1 to n do
begin
val(a[i],b,code);
if kt(a[j]) then
begin
val(a[i],a1,code);
val(a[j],b,code);
if a1>b then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
end;
end;
for i:=1 to n do write(r,a[i],' ');
close(r);
end.
Hãy giúp mọi người biết câu trả lời này thế nào?
Ý tưởng
Ta sẽ lưu các số nguyên trong A vào một mảng (allInts) và một mảng đựng tất cả các index ban đầu của các số đó (indexes)
Ta chỉ cần sort mảng allInts lại rồi ghép các số mới vào các vị trí trong indexes.
Tuy nhiên, cần lưu ý một điều nữa là độ dài của A[i] có thể lên tới 25, tức số lớn nhất có thể đạt được của A[i] là 10^26-1. Ta nghĩ ngay đến việc so sánh các xâu. Tuy nhiên, các ngôn ngữ lập trình so sánh 2 xâu theo thứ tự từ điển, tức "9" > "10" (do '9' > '1'), vì vậy ta cần dựng hàm riêng để so sánh.
Code
#include <bits/stdc++.h>
#define __file_name "XAU"
using namespace std;
bool check(string s){
for(char c: s){
if(!('0' <= c && c <= '9')) return false;
}
return true;
}
bool comp(string i, string j){
if(i.size() > j.size()) return false;
else if(i.size() < j.size()) return true;
else return (i < j);
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
if(__file_name != ""){
freopen(__file_name ".inp","r",stdin);
freopen(__file_name ".out","w",stdout);
}
int n; cin >> n;
string a[n];
for(int i=0;i<n;i++) cin >> a[i];
vector<int> indexes;
vector<string> allInts;
for(int i=0;i<n;i++){
if(check(a[i])){
indexes.push_back(i);
allInts.push_back(a[i]);
}
}
sort(allInts.begin(),allInts.end(),comp);
for(int i=0;i<indexes.size();i++) a[indexes[i]] = allInts[i];
for(int i=0;i<n;i++) cout << a[i] << ' ';
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
1428
24895
476
dài ~~~
1428
24895
476
làm cũng gần 30p :)) 1 bài mà 30p thì mai mốt ko biết đi thi kiểu j đây :V
1428
24895
476
ơ exitcode=106 ;-;
1428
24895
476
à ko code đúng rồi :V sai ở cái file :VVV