我的代码似乎有问题。我在下面提供了一些关于我的作业的详细信息,以及我在作业中的尝试。我的教授说我非常接近答案,但我终于得到了我的代码来编译和 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
你的程序必须包含一个主函数,至少两个函数,以及一个数组的用法。请注意,您没有对数组进行排序,但是直方图程序将是一个很好的参考程序。
让我强烈建议您在尝试进入程序之前用铅笔和纸制定一个计划。确保您模仿我在直方图示例中找到的文档。
到目前为止,这是我的代码:
#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");
}