c++试题2

18.写出下列程序的运行结果。
https://www.nowcoder.com/questionTerminal/2e8b44c677a1451d9c6662389fe31490

#include "stdio.h"
int sum(int a)
{
    auto int c = 0;
    static int b = 3;
    c += 1;
    b += 2;
    return (a + b + c);
}
int main()
{
    int i;
    int a = 2;
    for (i = 0; i < 5; i++) 
    { 
        printf("%d,", sum(a)); 
    } 
} 

8,10,12,14,16,

17 下面程序的功能是输出数组的全排列。请填空
https://www.nowcoder.com/questionTerminal/2e8b44c677a1451d9c6662389fe31490

void perm(int list[], int k, int m)
{
    if (    )
    {
        copy(list,list+m,ostream_iterator<int>(cout," "));
        cout<<endl;
        return;
    }
    for (int i=k; i<=m; i++)
    {
        swap(&list[k],&list[i]);
        (    );
        swap(&list[k],&list[i]);
    }
}

k!=m 和 perm(list,k+1,m)
km 和 perm(list,k+1,m)
k!=m 和 perm(list,k,m)
k
m 和 perm(list,k,m)
解析:做题的时候不知道什么是全排列,输入数字123,有多少种排列方式。全部排列(123,132,213,231,312,321),叫全排列。

题本身有个错误,for (int i=k; i<=m; i++)区间是List的【k,m】之间的数排列,包括了m.那么打印输出应该是copy(list,list+m+1,ostream_iterator(cout," "));

此题:范围是K到m,显然希望参数K<M,输出又是list~list+m+1;因此,M不变,变得是k。只有递归到K==M时打印。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值