借书方案值多少

小明有5本新书,要借给A、B、C这三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

这属于排列组合问题:

第一种方案:

#include<stdio.h>
int main()
{
    int a,b,c,i=0;
    printf("A,B,C三人所选书号分别为:\n");
    for(a=1;a<=5;a++)
        for(b=1;b<=5;b++)
            for(c=1;c<=5;c++)
                if(a!=b&&a!=c&&b!=c)
                {
                    printf("A:%2d B:%2d C:%2d",a,b,c);
                    i++;
                    if(i%4==0)
                    printf("\n");
                }
    printf("共有%d种有效借阅方式\n",i);
}

第二种方案稍微修改后,没有改进仍有的三层循环,但是在程序的执行时间有了很大的提高。源程序不管a,b的值是否相等,循环都要重复5次,现在就可以避免这个了。

#include<stdio.h>
int main()
{
    int a,b,c,i=0;
    printf("A,B,C三人所选书号分别为:\n");
    for(a=1;a<=5;a++)
        for(b=1;b<=5;b++)
            for(c=1;c<=5&&a!=b;c++)
                if(a!=c&&b!=c)
                {
                    printf("A:%2d B:%2d C:%2d",a,b,c);
                    i++;
                    if(i%4==0)
                    printf("\n");
                }
    printf("共有%d种有效借阅方式\n",i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值