我正在解决这个问题,我需要提供一些投入,找到其中最大和最小的。以下是问题陈述
Ivan Vasilyevich来到市场,决定买两只西瓜:一只给自己,另一只给妻子的母亲。显然,为自己选择最重的西瓜,为岳母选择最轻的西瓜。但有一个问题:西瓜很多,他不知道如何选择最轻和最重的西瓜。救救他!输入第一行包含西瓜数n(n,n,≤,约30000)。第二行包含n个等号,每个数是相应的西瓜质量。西瓜的所有重量都是正整数,不超过30000。输出打印两个数字: Ivan Vasilyevich将给他的岳母买西瓜的重量和他自己买的西瓜的重量,或者打印“哎哟!”(没有引号),如果有人没有西瓜
这是我的密码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, w[30000], gw, lw;
scanf("%d", &n);
n = abs(n);
for (i = 0; i < n; i++)
{
scanf("%d", &w[i]);
}
if (n >= 2)
{
for (i = 0; i < n; i++)
{
if (w[0] < w[i])
w[0] = w[i];
gw = w[0];
}
for (i = 0; i < n; i++)
{
if (w[0] > w[i])
w[0] = w[i];
lw = w[0];
}
printf("%d %d", lw, gw);
return 0;
}
else
{
printf("Ooops!");
return 0;
}
}我答错了(96/100)。我做错什么了?
发布于 2022-04-21 11:31:53
您不需要为30k整数数组分配空间来查找输入的最小和最大权重。
首先,将min和max权重初始化为输入的第一个整数,然后在读取更多权重时相应地更新min和max。使用变量cur (整数)存储读取的最后一个整数(即权重)。
这样,你就可以一次完成,而不是在多个循环中完成。
如果您使用scanf,那么检查它的返回值是很好的做法。供参考(来自C99标准):
函数返回宏EOF的值,如果在任何转换之前发生输入失败,则返回该值。否则,scanf函数将返回指定的输入项数,如果早期匹配失败,则输入项的数量可以少于规定,甚至为零。
在我们的例子中,当我们的scanf调用是表单scanf("%d", &a) ( a是一些int )时,我们希望调用scanf("%d", &a)返回1。
虽然检查返回值是一个很好的实践,但这并不是绝对必要的。如果这是一个针对您的类的程序,并且您从未使用过scanf的返回值,则可以删除对下面返回值的所有检查,并且程序的功能应该是相同的。尽管如此,如果您确实检查返回值并在检查它的理由中引用C标准(因为返回值提供了非常有用的信息),这将显示出很大的主动性。
#include <stdio.h>
#include <stdlib.h>
#define MAX_WAT 30000 /* maximum number of watermelons */
int main(void) {
int n, i, min, max, cur;
/* prompt user for number of watermelons */
printf("Enter number of watermelons: ");
/* read integer, checking return value of scanf as expected */
if (scanf("%d", &n) != 1) {
printf("error in scanf\n");
exit(EXIT_FAILURE);
}
if (n > MAX_WAT) {
printf("Please enter less than %d watermelons.\n", MAX_WAT);
return 0;
}
/* if zero or one watermelons, at least one person leaves without */
if (n <= 1) {
printf("Ooops!\n");
return 0;
}
/* initialize min, max to first integer and update
min, max accordingly as new weights are read */
printf("Enter weights of %d watermelons: ", n);
scanf("%d", &cur);
min = max = cur;
for (i = 1; i < n; i++) {
if (scanf("%d", &cur) != 1) {
printf("error in scanf\n");
exit(EXIT_FAILURE);
}
if (cur < min)
min = cur;
if (cur > max)
max = cur;
}
printf("Ivan Vasilyevich: %d\nMother: %d\n", max, min);
return 0;
}例会1:
Enter number of watermelons: 5
Enter weights of 5 watermelons: 2 5 1 9 10
Ivan Vasilyevich: 10
Mother: 1例会2:
Enter number of watermelons: 1
Ooops!例会3:
Enter number of watermelons: 30001
Please enter less than 30000 watermelons.发布于 2022-04-21 11:07:26
array
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, w[30000], gw, lw;
scanf("%d", &n);
n = abs(n);
for (i = 0; i < n; i++)
{
scanf("%d", &w[i]);
}
if (n >= 2)
{
gw = w[0];
for (i = 0; i < n; i++)
{
if (gw < w[i]) gw = w[i];
}
lw = w[0];
for (i = 0; i < n; i++)
{
if (lw > w[i]) lw = w[i];
}
printf("%d %d", lw, gw);
return 0;
}
else
{
printf("Ooops!");
return 0;
}
}https://stackoverflow.com/questions/71953198
复制相似问题