当前位置: 首页 > news >正文

PTA 交换最小值和最大值 (15 分)

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:

输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:

在行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:

5 8 2 5 1 4

输出样例

1 2 5 4 8

记录我debug几个小时的题,改了好几遍T-T,这是我的第一篇博客

此题一开始做法是用选择排序,但是选择排序中间的数字的顺序也会跟着改变

后来我的想法是先找到最大值最小值,然后再遍历数组,在数组中找到对应的数,再将对应的数根据题目要求的那样交换,但很奇怪结果一直不对

这是改过的正确代码

#include<stdio.h> int main() { int array[10]; int n,j,i,k,temp,l; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&array[i]); int min=array[0],max=array[n-1]; for(l=0;l<n;l++){ min=(min<=array[l])?min:array[l]; max=(max>=array[l])?max:array[l]; } for(k=0;k<n;k++) { if(array[k]==min){ temp=array[0]; array[0]=array[k]; array[k]=temp;} } for(k=0;k<n;k++) { if(array[k]==max){ temp=array[n-1]; array[n-1]=array[k]; array[k]=temp;} } for(j=0;j<n;j++){ printf("%d ",array[j]); } return 0; }

原始版1:一开始min,max结果一直不对当

for(l=0;l<n;l++){ min=(min<=array[l])?array[0]:array[l]; max=(max>=array[l])?array[n-1]:array[l]; }

试想当最后一次循环当上一次的结果使max=array[l-2],但是此次循环array[l-2]>array[l-1],则结果应该是array[l-2]

按我上面的代码来,结果会变成array[n-1],不能又等于初始值的

错误!要清楚循环过程中max可以改变的

初始版2:改完上一个我的下面代码其实是这样的,并一起遍历,并没有考虑到是首先交换首数,因为可能先对应到max,则max先交换了

for(k=0;k<n;k++) { if(array[k]==min){ temp=array[0]; array[0]=array[k]; array[k]=temp;} } else if(array[k]==max){ temp=array[n-1]; array[n-1]=array[k]; array[k]=temp;} }

以下是借鉴了厉害的uu的答案,我又加以简化了,思路可以学习

改变数组下标方式思路简单一些,效率更高

#include<stdio.h> int main() { int array[10]; int n,j,i,k,temp,l; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&array[i]); int min=array[0],max=array[n-1]; for(l=0;l<n;l++){ min=(min<=array[l])?min:array[l]; max=(max>=array[l])?max:array[l]; } for(k=0;k<n;k++) { if(array[k]==min){ temp=array[0]; array[0]=array[k]; array[k]=temp; } } for(k=0;k<n;k++) { if(array[k]==max){ temp=array[n-1]; array[n-1]=array[k]; array[k]=temp; } } for(j=0;j<n;j++) printf("%d ",array[j]); return 0; }

看清题意此题

1.中间数字序列不能改变,只是首位数改变;

2.先改变首数后是尾数,所以不能并一起遍历

http://www.jsqmd.com/news/1315264/

相关文章:

  • 北京企业合同审查律师选聘:专注商事合同领域的实务经验考察 - 品牌深度评测
  • DirectShow图像处理实战:从Filter Graph架构到实时边缘检测实现
  • 龙岗区:排钻碎钻手链钻戒回收避坑!为什么你的碎钻总被低价收? - 大牌深度测评
  • 手写一个 RAG:从零搭建可溯源的检索增强问答系统
  • LS-DYNA显式动力学仿真中负体积问题的诊断与系统性解决方案
  • 深入理解C#变量:从内存模型到最佳实践
  • Ubuntu 上搭建Samba和nfs服务
  • 引用其他project的module,根据参数自动配置依赖,repo管理多个 Project
  • React Native与Godot整合部署:跨平台应用与高性能游戏引擎融合实践
  • 5分钟快速上手:免费获取网易云QQ音乐无损歌词的完整指南
  • 龙华区:四爪极简钻戒回收攻略!无证书也能高价变现的秘诀 - 大牌深度测评
  • 【软件】【vs】Visual Studio编译c语言程序
  • Unity游戏本地化实战:10分钟配置自动翻译插件,加速多语言开发
  • Unity-MCP:基于MCP协议实现AI与Unity编辑器的深度集成
  • 从零复刻《超级马力欧》:C++与SDL2游戏开发核心实践
  • 单片机毕业设计-基于单片机的手自一体智能节能台灯硬件控制系统开发 基于 51/STM32 单片机的环境光感应人体跟随台灯设计(021401)
  • 如何用GHelper实现华硕笔记本的终极硬件控制:轻量级开源方案深度解析
  • AI概念风格渲染黄金参数表(2024Q2最新Benchmark):ResNet-50 vs ViT-L/14作为VAE encoder的PSNR/SSIM对比实测,仅开放72小时
  • 如何快速上手LTX-2.3-nvfp4:AI音视频生成的终极完整指南
  • 基于jenkins进行定制化开发
  • 计算机单片机毕设实战-基于单片机的 OLED 水质参数显示与阈值报警系统实现 基于 STM32/51 单片机的 DS18B20 水质测温浊度检测装置(021601)
  • Blender到Unity资产迁移:解决FBX贴图丢失的完整工作流
  • 5分钟快速上手:DouK-Downloader抖音TikTok批量下载神器终极指南
  • 微视觉计算实战:从模型压缩到边缘部署的完整指南
  • fre:ac音频转换器完整教程:从零开始掌握专业音频处理
  • 基于ESP32与电子墨水屏的TRMNL智能终端DIY全攻略
  • 获取QQ邮箱授权码
  • 想做同城获客的代账公司找企跑星怎么打,本地获客打法 - 欢欢在创业
  • 专业工业设备三维动画制作公司推荐
  • 模型输出 JSON 频繁报错:Function Calling 自动修复与确定性 Schema 防线