有一个整数序列,所有元素均不相同,设计一
个算法求相差最小的元素对的个数
。例如序列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
За предоставленную информацию благодарим