解题思路:
输入10个数;
先找到最小数与第一个数交换;
再找到最大数与最后一个交换;
输出交换后的十个数,每个后面带空格;
注意事项:
不可以同时找到最大数和最小数然后一起交换
有同学问为什么不可以,先找到最小最大,在一次性交换,原因如下
如输入数据: 10 1 2 3有
min=1,对应下标为 1 ;max=10对应下标为0
先与第一个数交换后为:1 10 2 3 ,但是注意此时正确max下标变成了1
继续按照之前记录的max下标0进行交换,即变成1与3交换,与实际10与3交换不相符,所以出错
参考代码:
#include <stdio.h> void deal( int a[] ); int main() { int x[10]; for ( int i = 0; i < 10; i++ ) scanf( "%d", &x[i] ); deal( x ); return(0); } void deal( int a[] ) { int max = 0, x, team, l, min = a[0]; for ( int i = 0; i < 10; i++ ) //找最小数,交换 { if ( a[i] < min ) { min = a[i]; l = i; } } team = a[0]; a[0] = min; a[l] = team; for ( int k = 0; k < 10; k++ ) //找最大数,交换 { if ( a[k] > max ) { max = a[k]; x = k; } } team = a[9]; a[9] = max; a[x] = team; for ( int j = 0; j < 10; j++ ) //输出 printf( "%d ", a[j] ); }
别忘点赞哦-.-
0.0分
116 人评分
有人解答一下w运行错误:运行时错误,非法的内存访问,数组越界,指针漂移,调用禁用的系统函数。 Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域 #include <stdio.h> void change_max(int b[]); void change_min(int c[]); int main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); change_max(a); change_min(a); for(i=0;i<10;i++) printf("%d ",a[i]); return 0; } void change_max(int b[]) { int s,m,max,temp; max=b[0]; for(s=1;s<10;s++) { if(b[s]>max) { max=b[s]; m=s; } } temp=b[9]; b[9]=b[m]; b[m]=temp; }
我想请问假如输入是 2 5 1 1 1 8 9 6 9 4,如果程序正确,输出是多少?是 1 5 2 2 2 8 4 6 4 9吗? 如果按楼主的参考代码,输出是1 5 2 1 1 8 4 6 9 9。 我很疑惑,最小数是1,但有三个,每个都应该与第一个交换吧。最大数是9,有两个,每个都应该与最后一个数交换吧。所以我觉得输出应该是 1 5 2 2 2 8 4 6 4 9. 我不知道是题目有歧义,还是我理解有误,请解惑。
accyuri 2022-03-09 13:06:47 |
题目只要求第一个和最后一个
#include<stdio.h> int num(int *a); int main() { int a[10]; int i,temp; for(i=0;i<10;i++){ scanf("%d",&a[i]); } num(a); for(i=0;i<9;i++){ printf("%d ",a[i]); } printf("%d ",a[9]); return 0; } int num(int *a){ int i,temp,min,max; min=0; max=9; for(i=0;i<10;i++){ if(a[i]<a[min]){; min = i; } if(a[i]>a[max]){ max = i; } } temp = a[min]; a[min] = a[0]; a[0] = temp; temp = a[max]; a[max] = a[9]; a[9] = temp;}
#include <bits/stdc++.h> using namespace std; int main(){ int a[100]={0}; int min_i=0,min=0,max_i=0,max=0,t=0; for(int i=0;i<10;i++){ scanf("%d",&a[i]); } min=a[0]; for(int i=0;i<10;i++){ if(min>a[i])min_i=i,min=a[i]; } t=a[0];//小数 a[0]=min; a[min_i]=t; for(int i=0;i<10;i++){ if(max<a[i])max_i=i,max=a[i]; } t=a[9]; a[9]=max; a[max_i]=t; for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0; }
一开始以为是一道很简单的题目,后面怎么提交都过不了,来到这里才恍然大悟犯了这种错,学到了学到了 #include<stdio.h> int main(){ int a[10], i, min = 0, max = 0, t; for(i = 0; i < 10; i++) scanf("%d", &a[i]); for(i = 0; i < 10; i++){ if(a[i] > a[max]) max = i; } t = a[9]; a[9] = a[max]; a[max] = t; for(i = 0; i < 10; i++){ if(a[i] < a[min]) min = i; } t = a[0]; a[0] = a[min]; a[min] = t; for(i = 0; i < 10; i++) printf("%d ", a[i]); return 0; }
#include<iostream> #include<algorithm> int main(int argc, char *argv[]){ int a[10]; for(int i = 0; i<10; i++){ std::cin>>a[i]; } int min = a[0]; int max = a[9]; int t,u; for(int i = 0; i<10; i++){ if(a[i]<min){ min = a[i]; t = i; } } std::swap(a[0],a[t]); for(int i = 0; i<10; i++){ if(a[i]>max){ max = a[i]; u = i; } } std::swap(a[9],a[u]); for(int i = 0; i<10; i++){ std::cout<<a[i]<<" "; } }
#include<stdio.h> #include<string.h> int main() { int b[10]; int shuru(int x[]); int culi(int x[]); int shucu(int x[]); shuru(b); culi(b); shucu(b); } int shuru(int x[]) { for (int i = 0; i < 10; i++) scanf_s("%d",&x[i]); return 0; } int culi(int x[]) { int t = 0; for (int i = 1,j=0; i < 10; i++) //找最小数 { if (x[j] > x[i]) //用已知的最小数跟下一个数比较 j = i; if(i == 9) { t = x[0]; x[0] = x[j]; x[j] = t; } } for (int i = 1, j = 0; i < 10; i++) //找最大数 { if (x[j] < x[i]) // 用已知的最大数跟下一个数比较 j = i; if (i == 9) { t = x[9]; x[9] = x[j]; x[j] = t; } }
K-进制数 (C++代码)浏览:850 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:2465 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:650 |
C语言训练-计算1977!* (C++代码)浏览:847 |
蛇行矩阵 (C语言代码)浏览:742 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:519 |
本人酷爱递归实现很多问题,这里也是浏览:545 |
剪刀石头布 (C语言代码)浏览:1745 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:667 |
简单的a+b (C语言代码)浏览:414 |
seventeen 2021-01-31 00:03:45 |
void change_min(int c[]) { int t,n,min,term; min=c[0]; for(t=1;t<10;t++) { if(c[t]<min) { min=c[t]; n=t; } } term=c[0]; c[0]=c[n]; c[n]=term; }