关于c语言的一个问题帮我看一下

试题要求(试题分数:50分,程序设计下第1题,共2题)【程序设计】
功能:为数组a[5]输入数值,并计算去掉最大值和最小值后剩余数的平均值,最后只输出平均值即可。特别注意,请务必在
Begin
********** End **********
中作答,并使用已定义好的变里,注意不允许定义新变里。
一本

:#inelude <stdio.h> Eint main0
double a[5]max,minsum,avg; int i:
/Begin*/ I

/End***/ return 0.


#include <stdio.h>

int main() {
    double a[5], max, min, sum = 0, avg;
    int i;

    printf("请输入5个数:\n");
    for (i = 0; i < 5; i++) {
        scanf("%lf", &a[i]);
    }

    max = a[0];
    min = a[0];
    for (i = 1; i < 5; i++) {
        if (a[i] > max) {
            max = a[i];
        }
        if (a[i] < min) {
            min = a[i];
        }
    }

    for (i = 0; i < 5; i++) {
        if (a[i] != max && a[i] != min) {
            sum += a[i];
        }
    }

    avg = sum / 3;
    printf("去掉最大值和最小值后的平均值为:%.2lf\n", avg);

    return 0;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7430242
  • 这篇博客也不错, 你可以看下数组A[10][15]的每个元素都是占4个字节的数据,将其按列优先次序存储
  • 除此之外, 这篇博客: 【搜索算法】八数码问题的多种解法中的 使用第一种启发式函数的A*算法代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码介绍待更
    inti.h头文件代码传送

    #include"init.h"
    
    struct Node{
        	int Fn, Num;
        	string S1;
        	bool operator < (const Node & a) const{ return Fn>a.Fn; }
    };
    
    int Compare(string a, string b){
     	int jShu = 0;
     	for(int i=0; i<9; i++) if(a[i]!=b[i]) jShu++;
     	return jShu;
    }
    
    priority_queue<Node> NS;
    map<string, int> Map;
    
    int main(){
     	if(Init()){
      		cout<<"No Solve"<<endl;
      		return 0;
     	}
     	Node Head;
     	Head.Fn = 0; Head.S1 = S;
     	for(int i=0; i<9; i++) if(S[i]=='0') Head.Num = (int)(i/3)*10+i%3;
     	NS.push(Head);
    	while(!NS.empty()){
      		Node b, a = NS.top(); NS.pop();
      		int Zhi = a.Num/100, x = (a.Num/10)%10, y = a.Num%10;
      
      		if(a.S1 == S_Goal){
       			cout<<Zhi<<endl;
       			break;
      		}
    		if(Map.count(a.S1)){
       			if(Map[a.S1]>Zhi) Map[a.S1] = Zhi;
       			else continue;
      		}
      		else Map[a.S1] = Zhi;
    		if(x+1<3){
      			b.S1 = exChange(a.S1, x+1, y, x, y);
       			b.Fn = Zhi + Compare(b.S1, S_Goal);
       			b.Num = (x+1)*10+y+(Zhi+1)*100;
       			NS.push(b);
    		}
      		if(y+1<3){
       			b.S1 = exChange(a.S1, x, y+1, x, y);
       			b.Fn = Zhi + Compare(b.S1, S_Goal);
       			b.Num = x*10+y+1+(Zhi+1)*100;
       			NS.push(b);
      		} 
      		if(x-1>=0){
       			b.S1 = exChange(a.S1, x-1, y, x, y);
       			b.Fn = Zhi + Compare(b.S1, S_Goal);
       			b.Num = (x-1)*10+y+(Zhi+1)*100;
       			NS.push(b);
    		}
      		if(y-1>=0){
       			b.S1 = exChange(a.S1, x, y-1, x, y);
       			b.Fn = Zhi + Compare(b.S1, S_Goal);
       			b.Num = x*10+y-1+(Zhi+1)*100;
       			NS.push(b);
      		}
      	}
     	TimeB("A_Star算法+Map"); 
     	return 0;
    }

    有一些优化,但是不是非常明显,当然如果有更好的启发式函数会更快
    在这里插入图片描述
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以回答这个问题。

    根据题目要求,首先需要定义数组a[5],并读入5个数值。随后,需要遍历一次数组,求出其中最大值和最小值,并将其他数值求和,最后除以3(3为剩余数的个数)即可得到平均值。

    以下是示例代码:

    #include <stdio.h>
    
    int main() {
        int a[5]; // 定义数组a[5]
        int i;
    
        for (i = 0; i < 5; i++) {
            scanf("%d", &a[i]); // 读入5个数值
        }
    
        int min = a[0], max = a[0], sum = a[0]; // 初始化
    
        // 遍历数组,求出最大值、最小值和其他数值的和
        for (i = 1; i < 5; i++) {
            if (a[i] > max) {
                max = a[i];
            }
            if (a[i] < min) {
                min = a[i];
            }
            sum += a[i];
        }
    
        // 计算剩余数的平均值
        float avg = (sum - max - min) / 3.0;
    
        printf("剩余数的平均值为:%f\n", avg);
    
        return 0;
    }
    

    输入示例:

    1 2 3 4 5
    

    输出示例:

    剩余数的平均值为:3.000000