小人物哈哈哈哈 2021-01-22 14:03 采纳率: 0%
浏览 166

有木有大佬知道为什么我的while循环只执行了一次便停止了

//判断一个无序数列是否为等差数列
#include <iostream>
using namespace std;
typedef struct node{
	int key;//key用来记录是否为等差,0代表是,1代表不是
	struct node* next;
}node,*Linklist;

void mysort(int a[],int n){
	int i,j,k,temp;
	for(i=0;i<n;i++){
		k=i;
		for(j=i+1;j<n;j++){
			if(a[j]<a[k]) k=j;
		}
		if(k!=i){
			temp=a[i];
			a[i]=a[k];
			a[k]=temp;
		}
	}
}

int main(){
	int n,i,num;
	Linklist L,p,q;
	L=(Linklist)malloc(sizeof(node));
	L->next=NULL;
	p=L;
	while(1){
		cout<<"输入n的值:";
		cin>>n;
		if(n==0){//n等于0代表输入结束,执行输出yes和no的语句
			p=L->next;
			while(p!=NULL){
				if(p->key==1)
					cout<<"yes";
				else if(p->key==0)
					cout<<"no";
				p=p->next;
			}
			break;
		}
		int a[1000];
		cout<<"输入数列中元素(元素两两之间以空格隔开):";
		for(i=0;i<n;i++){
			cin>>a[i];
		}
		mysort(a,n);
		q=(Linklist)malloc(sizeof(node));
		q=p->next;
		q->next=NULL;
		num=a[1]-a[0];
		for(i=1;i<n;i++){
			if(a[i]-a[i-1]!=num){//说明不是等差数列,直接跳出
				q->key=0;
				break;
			}
		}
		if(i==n){//说明是等差
			q->key=1;
		}
		p=q;
	}
	return 0;
}

 

  • 写回答

1条回答 默认 最新

  • 黑黍 2021-01-22 15:43
    关注

    你这个程序是错误退出,最好的最简单的办法就是cout调试

    你这个有很多错误:

    1、你排序写的不对,会导致溢出,排序有很多,去学学怎么写

    2、内存分配会出现错误

    评论

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划