最值问题

  1. 找最小数,输出,并输出它的位置
#include<stdio.h>
main()
{   
    int a[1000+1], min, i, mi;
    int m=6;  //有m个数据
    for(i=0; i<m; i++)
        scanf("%d", &a[i]);
    min=a[0];  mi=0;   // min记录当前最小数据的值,mi记录其下标位置,它们应该同步
    for(i=0; i<m; i++)
        if(a[i]<min)   //发现更优解, 更新答案
        {   min=a[i];  mi=i;   
        }
    printf("%d, %d\n", min, mi);
    return 0;
}
  1. 输入一些整数(不超过1000个),哪两个数最接近,输出结果?
    (1) 假设答案只可能有一对数。
#include<stdio.h>
#include<math.h>
main()
{   
    int a[1000+1], min, i,j, x,y ;  
    int m=6;  //有m个数据
    for(i=0; i<m; i++)
        scanf("%d", &a[i]);

    min=fabs(a[0]-a[1]);   x=0 ;   y=1;     // x, y记录最接近的那对数的位置
    for(i=0; i<m-1; i++)
        for(j=i+1; j<m; j++)
            if( fabs(a[i]-a[j])<min )
            {
                min=fabs(a[i]-a[j]); 
                x=i; y=j;
            }

    printf("%d %d\n", a[x], a[y]);
    return 0;
}
  1. 输入一些整数(不超过1000个),哪两个数最接近,输出结果?
    (2) 考虑答案可能有多对数的情况。
#include<stdio.h>
#include<math.h>
#define N 1000
main()
{   
    int a[N+1], i,j,k=0, min;
//  int x[N], y[N] ;   //可以把满足条件的数据都记录下来
    int m=6;  //有m个数据
    for(i=0; i<m; i++)
        scanf("%d", &a[i]);

    min=fabs(a[0]-a[1]);       //找出最小的差值
    for(i=0; i<m-1; i++)   
        for(j=i+1; j<m; j++)
            if( fabs(a[i]-a[j])<min )
                    min=fabs(a[i]-a[j]); 

    for(i=0; i<m-1; i++)  
        for(j=i+1; j<m; j++)
            if( fabs(a[i]-a[j])==min )
            {
                printf("%d %d\n", a[i], a[j]);  //直接输出答案
            //  x[k]=i;  y[k]=j;    k++;    //记录当前这对数的下标        
            }
//  for(i=0; i<k; i++)    
//      printf("%d %d\n", a[x[i]], a[y[i]]);   //根据记录输出信息
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值