亲,年会随机礼物互换,如何实现1-20个数字随机配对,看你是电脑高手跪求解答

亲,年会随机礼物互换,如何实现1-20个数字随机配对,看你是电脑高手跪求解答,第1张

就是个随机洗牌的过程,脊闹假设编号原始位置顺序是1~20顺序排列,你可以用巧迹随机数每次交换任意两个位置的编号,这样交换n次后,可以认为顺序已经是随机的,最后指定相邻两个位置配对。

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define N 20

#define M 500

void main() { int a[N],i,j,k,m,n

  srand((unsigned int)time(NULL)) //设置随机数种子,保证每次运行不出现相同结果

  for ( i=0i<Ni++ ) a[i]=i+1 //数组按顺序赋值编号

  for ( i=0i<Mi++ ) { //洗牌M次

    m=rand()%N n=m while ( n==m ) n=rand()%N //保证交换的位置不孝野并重合

    k=a[m] a[m]=a[n] a[n]=k //交换编号

  }

  for ( i=0i<Ni+=2 ) printf("%d-%d\n",a[i],a[i+1]) //输出结果

}

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

题目:父亲给两兄弟分配N个礼物礼物,礼物的价耐败值分别为N1,N2,N3……Nn,为了让两兄弟高兴,父亲决定让两人得到的礼物总价值差的绝对值最小,尽量让分配结果公平,请用动态规划算法为父亲写出礼物分配的算法。

解析:

#include<iostream>

using namespace std

int main()

{

cout <<"请输入n"<<endl

int n

cin>>n

int *pn=new int[n]输入礼物个数

float *pValue = new float[n]礼物价值

float *pValue1 = new float[n]第一个人的礼物价值

float *pValue2 = new float[n]第二个人的礼物价值

cout <昌亩锋<"输入价值" <<endl

for (int i = 0i <n i ++) 将所有的值存起来

{

cin >>pValue[i]

}

int row1 = 0

int row2 = 0

float fvalue1 = 0

float fvalue2 = 0

for (int j = 0j <n j ++)

{

if (fvalue1 <= fvalue2)

{

pValue1[row1] = pValue[j]

fvalue1 += pValue1[row1]

row1 ++

}

else

{

pValue2[row2] = pValue[j]

fvalue2 += pValue2[row2]

row2 ++

}

}

cout <<"第一个"<<fvalue1 <<endl

cout <<"第二个耐晌"<<fvalue2 <<endl

delete[] pn

delete[] pValue

delete[] pValue1

delete[] pValue2

pn = NULL

pValue = NULL

pValue1 = NULL

pValue2 = NULL

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12419489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存