有一个整数序列,所有元素均不相同,设计一
个算法求相差最小的元素对的个数
。例如序列4,1,2,3的相差最小的元素对的个数是3,

其元素对是(1,2)、(2,3)、(3,4)。

粘贴代码请粘贴前面的,后面只是方便观看,但是标点不对,网页自动转成中文标点了,内容都一样

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>//递减排序需要的头文件
using namespace std;
int min(vector<int> &v)
{
    sort(v.begin(),v.end(),greater<int>());//递减排序
  /*  for(int n=0;n<v.size();n++)
{
    printf("%d ",v[n]);
}
*/
    int sum=1;//数对至少有一对
    int min=v[0]-v[1];//min是当前相差最小的一对大小相邻的数
    for(int i=1;i<v.size();i++)//从第二大的数开始遍历
    {
        if (v[i]-v[i+1] < min)//后面的差值更小就把min置为这个差值,重新计数对数
        {
            min=v[i]-v[i+1];
            sum=1;
        }
        else if(v[i]-v[i+1] == min)//如果和min一样就继续计数
        {
            sum++;
        }
        
    }
    printf("元素对为:\n");
    for(int i=0;i<v.size();i++)//输出数对
    {
        if(v[i]-v[i+1] == min)
        {
            printf("(%d,%d)",v[i],v[i+1]);
        }
    }
    
return sum;
    
}
int main()
{
    vector<int> v1;//定义一个数组容器v1
     int i;
    char s;//用于实现回车结束输入
    printf("请输入数字,以空格分隔,回车结束\n");
    for(;;)//用户自定义输入任意个数数字
    {
        scanf("%d",&i);
        v1.push_back(i);//尾插元素
        s=getchar();
        if (s=='\n')
        {
            break;
        }
    }

printf("\n相差最小数对个数为 :%d\n",min(v1));
system("pause");
}

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>//递减排序需要的头文件
using namespace std;
int min(vector<int&v)
{
    sort(v.begin(),v.end(),greater<int>());//递减排序
  /*  for(int n=0;n<v.size();n++)
{
    printf(“%d “,v[n]);
}
*/
    int sum=1;//数对至少有一对
    int min=v[0]v[1];//min是当前相差最小的一对大小相邻的数
    for(int i=1;i<v.size();i++)//从第二大的数开始遍历
    {
        if (v[i]v[i+1] < min)//后面的差值更小就把min置为这个差值,重新计数对数
        {
            min=v[i]v[i+1];
            sum=1;
        }
        else if(v[i]v[i+1] == min)//如果和min一样就继续计数
        {
            sum++;
        }
        
    }
    printf(“元素对为:\n);
    for(int i=0;i<v.size();i++)//输出数对
    {
        if(v[i]v[i+1] == min)
        {
            printf(“(%d,%d)”,v[i],v[i+1]);
        }
    }
    
return sum;
    
}
int main()
{
    vector<int> v1;//定义一个数组容器v1
     int i;
    char s;//用于实现回车结束输入
    printf(“请输入数字,以空格分隔,回车结束\n);
    for(;;)//用户自定义输入任意个数数字
    {
        scanf(%d,&i);
        v1.push_back(i);//尾插元素
        s=getchar();
        if (s==\n)
        {
            break;
        }
    }

printf(\n相差最小数对个数为 :%d\n,min(v1));
system(“pause”);
}


1 条评论

тенниси кз · 2023年5月1日 上午12:51

За предоставленную информацию благодарим

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注