私のコードに問題があるようです。以下に、私の割り当てに関する詳細と、割り当てでの試行を含めました。私の教授は、私は答えに非常に近いと言いますが、最終的にコードをコンパイルしてBAMすることができました! 端末に大量の数字を吐き出す無限ループが発生します。助けていただければ幸いです。:)
私のプログラムの要件は次のとおりです。
連続するサブシーケンスの最長部分の長さを昇順で求めるプログラムを作成してください。長さ、それが配置されている場所、およびサブシーケンス内の整数を出力します。同じ長さのサブシーケンスが複数ある場合は、最初に見つかったサブシーケンスを出力します。
入力:
入力には複数のデータ セットが含まれます。入力の各行は、データ セットを表します。データセットの最初の整数は、データセット (ライン上) に残っている整数の数です。データ セットの終わりには -1 のマークが付けられます。以下はデータファイルの例です。
16 45 89 41 55 59 64 80 70 12 45 70 90 94 99 23 41 10 1 2 3 4 5 6 7 8 9 10 16 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 -1
出力:
- データセット 1 ==>
Longest: 6 Positions: 8-13 Sequence: 12 45 70 90 94 99
- データセット 2 ==>
Longest: 10 Positions: 0-9 Sequence: 1 2 3 4 5 6 7 8 9 10
- データセット 3 ==>
Longest: 4 Positions: 0-3 Sequence: 1 2 3 4
プログラムには、メイン関数、少なくとも 2 つの関数、および配列の使用が含まれている必要があります。配列をソートしていないことに注意してください。ただし、Histogram プログラムは参照するのに優れたプログラムです。
プログラムに参加する前に、鉛筆と紙で計画を立てることを強くお勧めします。ヒストグラムの例にある私のドキュメントを模倣してください。
これまでの私のコードは次のとおりです。
#include<stdio.h>
#include<stdlib.h>
void load(int a[],int n);
void seq(int a[],int n,int *max, int *loc);
void print(int a[],int n);
int main(void)
{
int a[100];
int n;
int max;
int loc;
scanf("%d",&n);
while(n!=-1){
if(n>100){
fprintf(stderr,"Number entered is larger than 100\n");
exit(1);
}
load(a,n);
seq(a,n,&max,&loc);
print(a,n);
scanf("%d",&n);
}
return 0;
}
void load(int a[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
}
void seq(int a[],int n,int *max, int *loc)
{
int i;
int length=1;
*max=-1;
for(i=0;i<n-1;i++){
if(a[i]<a[i+1]){
length++;
if(length>*max){
*max=length;
*loc=i-*max+1;
}
}else{
if(length>*max){
*max=length;
*loc=i-*max+1;
}
length=1;
}
}
}
void print(int a[],int n)
{
int i=0;
while(i<n){
printf("%d ",a[i]);
i++;
}
printf("\n");
}