试题要求(试题分数: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;
}
代码介绍待更
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;
}
有一些优化,但是不是非常明显,当然如果有更好的启发式函数会更快
我可以回答这个问题。
根据题目要求,首先需要定义数组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