dCan somebody help me, please?
My code for task "CharSwap" works on 19/20 test cases.
That 1 test case gets WA, i don't know why?
Here is my Pascal source code. I hope that my code
is understandable.
program charswap;
var a,b:array['a'..'z'] of longint;
i,j,z1,z2:char;
k,s,n:longint;
begin
for i:='a' to 'z' do begin
a[i]:=0; b[i]:=0;
end;
readln(n);
for k:=1 to n do begin
read(z1);
inc(a[z1]);
end;
readln;
for k:=1 to n do begin
read(z2);
inc(b[z2]);
end;
for i:='a' to 'z' do
for j:='a' to 'z' do
if a[i]=b[j] then begin
b[j]:=0;
break; end;
for i:='a' to 'z' do s:=s+b[i];
if s=0 then writeln('DA')
else writeln('NE');
end.
hI ja sam radio sa istom idejom i grešio. Mora voditi računa i o pozicijama. Probaj:
3
aab
bab
Pozdrav.
dHvala.
Kako onda radi 19 primjera, a samo jedan pada na WA? Jedino ako nije zbog dva moguća rješenja, pa sam negdje i pogodio odgovor.
Pozdrav.
DProbaj s indeksiranjem pozicija prema ascii vrijednostima...
hSale, tvoj program daje rezlutat DA, a tacno je NE.
A, sto se tiče test primera, izgleda da se slučajno poklapaju reultati 19 primera. I nisu moguća dva rešenja (jedinstveno je). Samo jos obrati paznju i na pozicije u stringu. Cak će ti i resenje biti kraće.
Znači, u onom primeru koji sam ti poslao, 'a' se preslika u 'b' (prva pozicija) .
A ako te je ovaj zadatak dovoljno iznervirao, mogu ti poslati rešenje koje je jako slično tvom (mada si jako blizu).
dHvala na pomoći. Probat ću se još malo nervirati, pa ako baš ne bude nikako išlo, onda se čujemo (halil).
hJoš koji primer za bolje razumevanje zadatka:
3
aab
bba
Result = DA
3
aab
ccd
Result = DA
3
aab
abb
Result = NE
pMoze li mi neko reci sta ne valja sa ovim kodom posto mi izbacuje sta treba kad ga testiram, a ne prolazi ni jedan test?
#include <stdio.h>
#include <stdlib.h> //a=97 z=122 brojslova[i]=brojslova['slova'-'a']
main(){
long n,i,j,n1=0,indda,indne=0,*brojslovaugornjem=NULL,*brojslovaudonjem=NULL;
char *gornji=NULL,*donji=NULL;
scanf("%ld",&n);
if (n==0) ;
else{
while (gornji==NULL){
gornji=calloc(n+1,sizeof(char));}
scanf("%s",gornji);
while (donji==NULL){
donji=calloc(n+1,sizeof(char));}
while (brojslovaugornjem==NULL){
brojslovaugornjem=calloc(26,sizeof(long));}
while (brojslovaudonjem==NULL){
brojslovaudonjem=calloc(26,sizeof(long));}
scanf("%s",donji);
for(i=0;i<n;i++) {
brojslovaugornjem[gornji[i]-'a']++;
brojslovaudonjem[donji[i]-'a']++;
}
}
for(i=0;i<n;i++){
if (!(brojslovaugornjem[gornji[i]-'a']==brojslovaudonjem[donji[i]-'a'])) {
printf("NE");
break;
}
}
if (i==n) printf("DA");
free(gornji),free(donji),free(brojslovaugornjem),free(brojslovaudonjem);
}
hProbaj:
3
aab
bab
Trebalo bi da NE, ovaj kod daje DA.
I probaj sa printf("DA\n") i printf("NE\n"); tj, na kraju najčešće treba \n.
Nije dovoljno samo da je broj odgovarajućih slova jednak, mora se voditi računa i o redosledu.
pNovi kod. Ostalo je nekoliko testova gde puca na exit code is not zero. Pokusavam da uvidim gde bi program mogao da pukne u toku izvrsavanja
#include <stdio.h>
#include <stdlib.h> //a=97 z=122 brojslova[i]=brojslova['slova'-'a']
main(){
long n,i,j,n1=0,indda,indne=0,brojslovaugornjem[26],brojslovaudonjem[26];
char *gornji=NULL,*donji=NULL,*gornji1=NULL,*donji1=NULL;
scanf("%ld",&n);
if (n==0) ;
else{
while (gornji==NULL){
gornji=calloc(n+1,sizeof(char));
}
while (gornji1==NULL){
gornji1=calloc(n+1,sizeof(char));
}
scanf("%s",gornji);
while (donji==NULL){
donji=calloc(n+1,sizeof(char));
}
while (donji1==NULL){
donji1=calloc(n+1,sizeof(char));
}
for(i=0;i<26;i++){
brojslovaugornjem[i]=0,brojslovaudonjem[i]=0;
}
scanf("%s",donji);
for(i=0;i<n;i++){
if (gornji[i]!='9'){
gornji1[n1]=gornji[i];
donji1[n1]=donji[i];
n1++;
}else continue;
for(j=i+1;j<n;j++){
if(gornji1[n1-1]==gornji[j] && donji1[n1-1]==donji[j]){
gornji[j]='9';
donji[j]='9';
}
}
}
for(i=0;i<n1;i++) {
brojslovaugornjem[gornji1[i]-'a']++;
if (brojslovaugornjem[gornji1[i]-'a']>1) {
printf("NE\n");
exit(0);
}
brojslovaudonjem[donji1[i]-'a']++;
if (brojslovaudonjem[donji1[i]-'a']>1) {
printf("NE\n");
exit(0);
}
}
}
printf("DA\n");
free(gornji),free(donji),free(gornji1),free(donji1);
}
hNa kraju bi trebalo return 0; da možeš dalje da testiraš
pOvo je zavrsilo posao. Svi testovi su OK. Samo ne znam koja je funkcija ovog return 0. Ovo nisam ranije koristio dok sam pisao na C-u(zadnja tri meseca od kad ga ucim na faxu)
hObavezno, jer to vraća informaciju sistemu da li je program abortovao.