编写一个C程序,实现以下功能:输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪(如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。
生活随笔
收集整理的這篇文章主要介紹了
编写一个C程序,实现以下功能:输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪(如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
編寫一個C程序,實現以下功能:
輸入n個人的身高,然后從n個人中選出身高差值最小的兩個人作為禮儀
(如果差值相同的話,選取其中最高的兩個人),要求輸出兩個禮儀的身高。(使用函數實現)
思路難點:
1.怎么去找差值最小,然后返回兩個人的身高呢。要知道如果亂序輸入身高,怎么進行比較是個難度,保存兩個人身高再返回也是難點
2.如果差值相同,最高兩個人身高怎么找?怎么返回?
思路:
1.對于這種亂序的情況,沒有更好的方法(也許只是我沒有想到,實力不夠)只能通過兩層for循環來依次實現數值相減。雖然時間復雜度較高,但由于是學生實驗而不是oj,倒是可以容忍(假的,我忍不了)
2.可以通過事先排好序然后去返回數組arr[n-1],arr[n-2](注意數組arr[n]放的是‘\0’)
答案:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> #include<algorithm> using namespace std; /*編寫一個C程序,實現以下功能: 輸入n個人的身高,然后從n個人中選出身高差值最小的兩個人作為禮儀 (如果差值相同的話,選取其中最高的兩個人),要求輸出兩個禮儀的身高。 */ #define MAX 500 void func(int* arr, int n, int* a, int* b) {int min = abs(a - b);//定義一個最小量,之后通過動態規劃去不斷改變這個值,直到找到最小for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {//差值不同if (abs(arr[i] - arr[j]) < min) {min = abs(arr[i] - arr[j]);//絕對值函數,頭文件是math.h*a = arr[i];*b = arr[j];}//差值相同else{*a = arr[n - 2];//記住‘\0’的存在*b = arr[n - 1];}}} } int main() {int n, arr[MAX];scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}int a, b;//定義兩個差值最小的人,假定為數組的0和1元素a = arr[0], b = arr[1];sort(arr, arr + n);//這里的sort是一個C++里面的STL,我懶得去寫排序代碼,直接用排序函數了//這里用冒泡排序是同理的。func(arr, n,&a,&b);printf("%d %d", a, b); }個人感覺是沒有什么技術難點,但感覺代碼不是很美觀。而且時間復雜度也很高。繼續加油吧
總結
以上是生活随笔為你收集整理的编写一个C程序,实现以下功能:输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪(如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winform php 交互,WinFo
- 下一篇: egg直接取req_Egg服务器基础功能