Wie, um herauszufinden, ob die gegebenen array in absteigender Reihenfolge sortiert, in der c-Programmierung
Ich brauche, um herauszufinden, ob der angegebene array in absteigender Reihenfolge sortiert ist oder nicht...
Ich habe die Ausgabe aber im portal, es zeigt, wie Falsche Antwort.
Dies ist mein code.
#include<stdio.h>
int main()
{
int n,a[15],i,k=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]);}
for(i=1;i<=n;i++)
{
if(a[i]<a[i+1])
k++;
}
if(k==0)
printf("yes");
else
printf("no");
return 0;
}
Mir helfen, es herauszufinden...
- Sie nicht brauchen, um zu überprüfen, alle die Zahl in das array, das erste mal, wenn Sie eine Zahl, die größer als die Vorherige Zahl, die Sie haben Ihre Antwort.
- Und du bist außerhalb der Grenzen des gelesenen Werte. Wenn Sie Lesen
n
Wert, was Wert wären + 1
haben? - Wie hast du davon ausgehen, dass der Nutzer wird immer die geben, die weniger als 15 zahlen im array a[15]? Das portal, wo Sie versuchen, den code zu testen wäre mit random test Fällen, in denen die array-Größe würde viel mehr als 15. In dem Fall würde der code fehl. Sie haben einen besseren Weg finden, dies zu tun.
- bitte lernen Sie die Sprache die Grundlagen, bevor Sie versuchen, Programme zu schreiben es. die Tatsache, dass Sie der Indizierung des arrays aus 1 zeigt, dass Sie keine Ahnung haben, was Sie tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arrays werden indiziert von
0
zusize - 1
. Also, wenn Siesind die Elemente
a[0]
zua[14]
. Aber in deinem code sind Sie aba[1]
zua[15]
und versuchen, aufa[15]
, die unsichere Speicher und wird Probleme verursachen.So sollten Sie zuerst ändern Sie Ihre for-Schleife.
Sollten Sie es ändern, um
In die zweite for-Schleife sollten Sie die Schleife, bis
i < n - 1
weil sonst inwenn
i = n
werden Sie versuchen, Zugriff auf dien + 1
th mit element mita[i+1]
, die möglicherweise außerhalb der Grenzen.Können Sie auch nur Ausfahrt aus der Schleife, sobald Sie herausfinden, dass das array nicht in absteigender Reihenfolge, um Zeit zu sparen.
Müssen Sie auch sicher sein, dass
a[15]
ist genug, um das speichern aller Werte ( d.h. die Anzahl der Werte, die als Eingabe sollte nicht mehr als 15, überprüfen Sie die Problematik, um dies sicherzustellen )break;
in Klammern{ }
sonst wird es break; Schleife in der ersten Zeit, als es draußen ist, wenn Bedingung.sollten Sie beginnen array-index aus
0
in beiden for-Schleife.Verwenden Sie diese
in der zweiten for-Schleife sollte man verwenden,
zum Beispiel, wenn Sie geben Sie
n = 5
- Schleife wird für die Arbeit0
zu4
Ist es gut zu verwenden
break;
wenn der Wertk
erhöhtHier sind Sie.:)
Der Ausgabe des Programms Aussehen könnte
Da für Sie der code dann in dieser Schleife
ist unsicher, da mit index
i+1
im Ausdrucka[i+1]
können Sie auf Speicher außerhalb des Arrays.Auch Sie haben zu prüfen, ob der eingegebene Wert n beträgt weniger als 15, die die Größe des Arrays, weil Sie die Indizes
[0, n]
.Und in der ersten Schleife der index startet bei 0. Ansonsten das erste element des Arrays können nicht initialisiert werden.
!( a[i-1] < a[i] )
gegenüber einfacherena[i-1]>=a[i]
Zuerst definieren Sie ein array[15]:
ist und Sie die Verwendung der variable n, um die Kontrolle über seine Größe
dann Sie benötigen, um zu halten n <= 15.
p.s., array beginnt mit '1' in der Matlab-aber '0' in C.
Kann ich nicht Zustimmen, weniger über das, was andere gesagt haben in Bezug auf die Indizierung von Arrays, das problem nicht zu wissen, ob a[i+1] existiert oder nicht, und mit der Pause. Ich würde allerdings hinzufügen, wenn die zahlen in diesem Eingabe-array gleich sind, wird es immer noch passieren, wie die Verringerung in Ihrem code. Wenn das ein problem ist, können Sie fügen Sie eine weitere if-Anweisung prüfen, ob es sinkt überall, und verwenden Sie eine andere variable, sagen ändern für die Prüfung, ob es geht zufrieden.
Check mit dem problem statement, ob es erlaubt solchen Fällen als absteigend. Wenn es nicht gehen mit diesem sonst alles in Ordnung ist.