要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。

主要思想是:现将五个人的身高用冒泡排序法进行排序,将相邻的2个身高做差,选择差值交小的那一组


# include < stdio.h >

# define n 5
int main ()
{

int i ,a[n];
int j , tmp;
int tmp1, num1 , num2 , min;
for ( i = 0; i < n; i++ )
scanf ( " %d" , &a[ i ] );
for ( i = 0; i < n-1 ; i++ )
for ( j = 0 ; j< n-1 - i ; j++)
{
if ( a[ j ] > a[ j+1 ] )
{
tmp = a[ j ];
a[ j ] = a[ j + 1 ];
a[ j + 1 ] = tmp;
}


}
//for ( i =0 ; i < n; i ++ )
// printf ( "%d " , a[i]);
// printf ("\n");
min = a[1] - a[0];
num1 = a[ 1 ];
num2 = a[ 0 ];
for ( i = 1; i < n - 1; i++)
{
tmp1 = a[ i+1 ] - a[ i ];
if ( min > tmp1 ) 
{
min = tmp1;
num1 = a[ i+1 ];
num2 = a[ i ];
}
if ( min == tmp1 )
{
    num1 = a[ i+1 ];
num2 = a[ i];
}
}
//printf ( "%d\n" , min);
printf ( "%d %d\n" , num1 , num2 );
return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于C语言的自动排班程序,可以每周对14个人进行排班,每个班次2人,一天5个班次: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_PEOPLE 14 #define NUM_SHIFTS 5 #define PEOPLE_PER_SHIFT 2 int main() { int schedule[NUM_SHIFTS][PEOPLE_PER_SHIFT]; int people[NUM_PEOPLE]; int i, j, k, temp, flag; // 初始化人员列表 for (i = 0; i < NUM_PEOPLE; i++) { people[i] = i + 1; } // 初始化排班表 srand(time(NULL)); for (i = 0; i < NUM_SHIFTS; i++) { flag = 0; while (!flag) { // 随机选取2个人员 for (j = 0; j < PEOPLE_PER_SHIFT; j++) { k = rand() % NUM_PEOPLE; temp = people[k]; people[k] = people[NUM_PEOPLE - 1]; people[NUM_PEOPLE - 1] = temp; schedule[i][j] = temp; NUM_PEOPLE--; } // 检查选的人员是否在同一个班次已经出现过 if (schedule[i][0] != schedule[i][1]) { flag = 1; } else { // 如果选的人员已经在同一个班次出现过,则重新选择 people[NUM_PEOPLE] = schedule[i][1]; people[NUM_PEOPLE - 1] = schedule[i][0]; NUM_PEOPLE += 2; } } } // 输出排班表 printf("本周排班表如下:\n"); for (i = 0; i < NUM_SHIFTS; i++) { printf("第%d天:\t", i + 1); for (j = 0; j < PEOPLE_PER_SHIFT; j++) { printf("%d\t", schedule[i][j]); } printf("\n"); } return 0; } ``` 程序的基本思路是,先初始化人员列表,然后随机选取2个人员作为一个班次的排班人员,并检查这个人员是否在同一个班次已经出现过,如果是,则重新选择。最后输出排班表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值