想问一下这段代码可以怎么改,能够降低圈复杂度
#include
void main()
{
int i, a, b, c;
i = 0;
while (i < 100) {
printf("Enter numbers: ");
scanf_s("%d %d%d", &a, &b, &c);
if (a > b)
{
if (a > c)
printf("max. a=%d\n", a);
else if (a == c)
printf("max. a=c=%d\n", c);
else
printf("max.c=%d\n", c);
}
else {
if (a == b)
{
if (a > c)
printf("max.a=b=%d\n", a);
else
if (a == c)
printf("max.a=b=c=%d\n", c);
else
printf("max.c=%d\n", c);
}
else {
if (b > c)
printf("max.b=%d\n", b);
else
if (b == c)
printf("max. b=c=%d\n", b);
else
printf("max. c=%d\n", c);
}
}
i++;
}
}
原题是这样的:
从键盘输入3个整数(间隔为空格),找出并输出其中数值最大的那一个。如果其中有一个以上的最大数(相等的情况),也要表示出来。
谢谢大家
同学你的代码得到最大数的比较次数最多比较四次,最少比较两次才能得到最大数,下面的代码比较两次就可以得到最大数
//比较两次得到三个数的最大数
int main()
{
int a, b, c, max = 0;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
max = a;
}
else
{
max = b;
}
if (max > c)
{
printf("%d", max);
}
else
{
printf("%d", c);
}
return 0;
}
#include <stdio.h>
#define MAX(A, B) ((A) > (B) ? (A) : (B))
void main()
{
int i, a, b, c;
i = 0;
while (i < 100) {
printf("Enter numbers: ");
scanf("%d %d %d", &a, &b, &c);
int nums[] = {a, b, c};
int max = MAX(MAX(a, b),c);
printf("max.");
for (int i = 0; i < 3; i++)
if (nums[i] == max) printf("%c=", 'a' + i);
printf("%d\n", max);
i++;
}
}