でのプログラミング、私はここに与えられたHackerRankの問題を解決した - https://www.hackerrank.com/challenges/bigger-is-greaterセグメンテーションフォールト(コアダンプ)C
プログラム文は以下の通りである:単語を考えると
、別のものを構築するために文字を並べ替えます字句的に元の文章よりも大きいような言葉。可能な回答が複数ある場合は、それらの中で辞書編集的に最も小さいものを見つけます。
あなたが理解していない場合は、リンクをクリックしてください。彼らは例を用いて説明した。
以下のようにプログラムを作成しました。このプログラムでは2次元配列を作成しました。変数t
は、行数と数値が確定したことを決定します。
t = 1
のようにコードが実行されています。 しかし、ときtが1以上であるか、それは誤りセグメンテーションエラーに
コードを与えるいくつかの大規模な数は以下の通りです:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int i,j,n,rot;
int t;
scanf("%d",&t);
char c[t][100];
char temp;
for(int i=0;i<t;i++)
{
scanf(" %s",c[i]);
}
rot=t;
for(int t=0;t<rot;t++)
{
n = strlen(c[t]);
//printf("%d\n",n);
for(i=n-1;i>=0;i--)
{
for(j=i-1;j>=0;j--)
{
//printf("comparint %c and %c\n",c[t][i],c[t][j]); //FOR DEBUG
if(c[t][i]>c[t][j]) goto gotit;
}
}
printf("no answer\n");
continue;
gotit:
temp = c[t][i];
c[t][i]=c[t][j];
c[t][j]=temp;
n = (n-1)-j;
//printf("%s\n",c[t]); //FOR DEBUG
//printf("%d %d %d\n",i,j,n); //FOR DEBUG
for(i=0;i<n-1;i++)
{
for(int k=0;k<n-1;k++)
{
// printf("comparint %c and %c\n",c[t][j+k+1],c[t][j+k+2]);
if(c[t][j+k+1]>c[t][j+k+2])
{
temp = c[t][j+k+1];
c[t][j+k+1]=c[t][j+k+2];
c[t][j+k+2]=temp;
}
}
}
printf("%s\n",c[t]);
}
return 0;
}
スタート - あなたのインデントを修正します。 –
私はこの問題を解決できれば、直接Hacker Rankに提出しますが、あなたの代理人になる機会に感謝します。それらのサイトはあなたの能力に関するものです。 –
セグメンテーションフォールトはどのラインで起こっていますか?デバッガでプログラムをステップ実行し、さまざまな手順で文字列の値を調べて、いつ破損したかを調べる必要があります。 – Barmar