#include<stdio.h>
int main() {
int i, m1, m2, n, num;
puts("\n");
scanf("%d",&n);
for(i = 0; i < n; i++) {
scanf("%d", &num);
if(i == 0) {
num = m1 = m2;
}
if(num > m1) {
m2 = m1;
m1 = num;
} else if(num > m2) {
m2 = num;
}
}
return 0;
}
我的标准:-950 -588 -169 -187 -445 400 -1
我必须得到stdout:-169
但是它显示标准输出:\n
注意:我想在没有数组的情况下解决这个问题。
答案 0 :(得分:1)
num = m1 = m2;
错误,并且不会导致三个变量具有相同的值。您需要将m1和m2分配给num。您正在覆盖以前读过的变量。将其更改为:
m1 = num;
m2 = num;
然后,打印出m2。
修改强>
正如其他人发现的那样,-1表示输入结束。添加简单的if语句可以解决问题,输入-169是第二大元素。
完整代码:
#include<stdio.h>
int main(){
int i, m1, m2, n, num;
puts("\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num);
if(i==0)
{
m1 = num;
m2 = num;
}
else if(num == -1) /* if -1 was read, then terminate the loop. */
{
break;
}
else if(num>m1)
{
m2 = m1;
m1 = num;
}
else if(num>m2)
{
m2=num;
}
}
printf("%d\n",m2);
return 0;
}
输入:
7
-950 -588 -169 -187 -445 400 -1
,当前代码输出为-169。
另一个编辑:
好吧,你的代码是错误的,因为scanf表示元素数量。将来如果你更清楚你的问题会很有帮助。我希望以下代码能为您服务。
#include <stdio.h>
int main(void)
{
int curr, second, first;
scanf("%d", &curr);
second = curr;
first = curr;
while (1) {
scanf("%d", &curr);
if (curr == -1) {
break;
}
if (curr > first) {
second = first;
first = curr;
}
else if (curr > second) {
second = curr;
}
}
printf("%d\n",second);
return 0;
}
答案 1 :(得分:1)
/* Program to find the second largest number without using array */
main()
{
int num,large=0,slarge=0,i=0;
clrscr();
printf("Enter the number:");
while(i<10)
{
scanf("%d",&num);
if(i==0)
{
large=num;
}
else if(num>large)
{
slarge=large;
large=num;
}
else if(num>slarge)
{
slarge=num;
}
i++;
}
printf("Large number:%d",large);
printf("\nSecond large=%d",slarge);
getch();
return 0;
}
答案 2 :(得分:0)
您的代码存在的问题是您使用的是m2
未初始化的问题。要更正此问题,请将m2
设置为某个合理的负数(如允许的最小整数)。这里我们只使用负数,例如:
m2 = -1000000;
<强> outout 强>
argument [0]: -950
argument [1]: -588
argument [2]: -169
argument [3]: -445
argument [4]: 400
argument [5]: -1
m1: 400
m2: -1
您的代码符合您的意图。 -1
是第二大数字(400
是最大的数字)。如果你想要-169
,那么你想要第三大。记住:
始终初始化您的变量
答案 3 :(得分:0)
这是一个更简单的工作版本:
#include <stdio.h>
#include <limits.h>
int main(int argc , char** argv)
{
int m1 , m2 , rc = 1;
m1 = m2 = INT_MIN ;
while(rc)
{
scanf("%d" , &rc);
if(rc > m1)
m1 = rc;
else if(rc < m1 && rc > m2)
m2 = rc;
}
printf("%d\n" , m2);
}
答案 4 :(得分:0)
/*Second largest elements in a given array*/
#include <stdio.h>
int SecondMax(int a[], int n) // n= array size
{
int max1, max2; //assume max1 as largest and max2 is second largest
max1= max2= a[0]; //Initialize first element of array
for(int i=0; i<n; i++)
{
if(a[i] > max1) //check each elements of array with max1
{
max2= max1;
max1= a[i];
}
else if(a[i] > max2)
max2= a[i];
}
return max2;
}
int main()
{
int a[10]={2, 54, 8, 9 ,12, 6, 3, 7, 32, -5};
printf("\nmax2= %d", SecondMax(a, 10)); //print return value
return 0;
}
答案 5 :(得分:0)
/* program to find the second largest number in the given list without array*/
main()
{
int num,large=0,slarge=0,i=0;
clrscr();
printf("Enter the number:");
while(i<10)
{
scanf("%d",&num);
if(i==0)
{
large=num;
}
else if(num>large)
{
slarge=large;
large=num;
}
else if(num>slarge)
{
slarge=num;
}
i++;
}
printf("Large number:%d",large);
printf("\nSecond large=%d",slarge);
getch();
return 0;
}
答案 6 :(得分:0)
/ *程序在没有数组* /
的情况下查找给定列表中的第二大数字public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
int n=1;
int large1=0,large2=0;
while(n !=10){
System.out.print("Enter number:");
int num=input.nextInt();
if(large1<num)
{
large2=large1;
large1=num;
}
else if(num>large2)
large2=num;
n++;
}
System.out.println("\nLargest number1= "+ large1);
System.out.println("\nLargest number2= "+ large2);
}
}
答案 7 :(得分:0)
复杂性较低的简单解决方案
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int max = 0 ;
int temp = 0 ;
int size = (int)(Math.log10(n)+1);
for(int i = 0 ; i<size;i++){
int m = n%10;
if(m>max){
temp = max;
max = m;
}
else if(temp < m) {
temp = m ;
}
n /= 10;
}
System.out.print(temp);
}
}