最值问题

来源:互联网 发布:linux没有iptables文件 编辑:程序博客网 时间:2024/06/06 00:29
  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 1000main(){       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