不需要代码,只需要简单的数学理论。
像:
我将参加C语言课程,但在此之前我想学习一些基础知识。 我需要一个程序/算法,使用 multiple-if或nested-if 找到最多和最少三个数字。
答案 0 :(得分:5)
有直截了当的方式:
int min(int a, int b, int c){
if (a <= b && a <= c){
return a;
}
if (b <= a && b <= c){
return b;
}
if (c <= a && c <= b){
return c;
}
}
有最少比较次数的方法:
int min(int a, int b, int c){
if (a < b){
if (a < c){
return a;
}
else{
return c;
}
}
else{
if (b < c){
return b
}
else{
return c;
}
}
}
,有最少的代码行
int min(int a, int b, int c){
return (a<b)?((a<c)?a:c):((b<c)?b:c);
}
评论中提到了twalberg的方式:
int min(int a, int b){
if (a <= b){return a;}
else{return b;}
}
int min(int a, int b, int c){
return min(min(a,b), c);
}
max也可以通过所有这些方式定义,将<
替换为>
。您也可以使用min
:
int max(int a, int b, int c){
return -min(-a, -b, -c);
}
如果您还不想学习如何声明函数,可以将其中的一些直接放入主函数中。例如,第二种方法:
//todo: translate this pseudocode into C
print "enter three numbers"
read(a)
read(b)
read(c)
if (a < b){
if (a < c){
min = a;
}
else{
min = c;
}
}
else{
if (b < c){
min = b
}
else{
min = c;
}
}
print "the minimum value is " + min
答案 1 :(得分:0)
鉴于问题要求,有两个因素将决定问题的最佳解决方案:
会是这样的:
1: Maximum = 0
2: Minimum = 0
3: read(number)
4: if number > Maximum then Maximum = number
5: if number < Minimum then Minimum = number
6: Repeat from 3 as many times as needed
7: Print Maximum and Minimum
答案 2 :(得分:0)
注意:这不是C;它的Javascript。但是,对于这样的一般问题,课程是相同的 - 实际上,由于语法上的相似性,许多相同的代码可以用于等效的C性能测试。
在this JSPerf中,我有四种获取数字数组的最小值/最大值的方法。第一种是直截了当的方式:
第二种使用分而治之的方法。这通常是对O(n ^ 2)问题的改进(例如,一种排序,其中每个值必须使用简单的实现与每个其他值进行比较),但是对于像这样的O(n)问题,没有&#39 ; t获得任何东西,并增加堆栈开销。
还有另一个递归版本,它使用索引来避免创建新数组来执行拆分(Array#slice()从旧数组中的数据创建一个新数组;这种类型的分配可能会使事情陷入困境向下)。
然后是使用JS的数学库作为参考点的原生解决方案。
我已在所有主流浏览器中运行它,因此可以看到JS引擎实现中的任何差异。
这里有几节课:
答案 3 :(得分:0)
然后是嵌套的宏方法(如评论中的twalberg所述),即让编译器从简单的结构中找出它。现代编译器擅长这一点。
#define MIN(a,b) (a) < (b) ? (a) : (b)
对于获得优先权和操作顺序非常重要。
要获得至少三个数字:
min3 = MIN(MIN(a,b), c);
四个数字:
min4 = MIN(MIN(a,b), MIN(c,d));
等等。这具有进一步的优点,即您不需要不同的整数或实数形式。
答案 4 :(得分:0)
方法很多
<块引用>对于示例 1,我正在编写代码,在 C++ 中从数组中找到最大值
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[]{2,1,4,12,6,3,20};
int sum = INT16_MIN;
for(int x : arr){
if(x>sum){
sum =x;
}
}
cout << sum;
return 0;
}
对于示例 2,我正在编写一个函数,从 C++ 中的 4 个元素中找到最大值
int max_of_four(int a,int b,int c,int d){
int max = INT16_MIN; //Min Int(16) possible in Code
if(a>max){
max=a;
}if(b>max){
max=b;
}if(c>max){
max = c;
}if(d>max){
max =d;
}
return max;
}
您可以用 N 组数字替换“四”,但这不是一种有效的方法。使用第一种方法求最大值/最小值
<块引用>为了找到最小值 取变量为“INT16_MAX”并更改条件 从“>”到“<”。