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)
km 和 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时打印。