① c语言编程题,13个人围成圈编号1~13数到3的出列,然后从第四个开始为1继续数到3的出列,最后剩下的是几号
结果是13号!
代码:
#include<stdio.h>
#define N 13
int main()
{
int flag[N+1] = {0}; //标志已出列的人,第0位不用
int i,j,out = 0;
i=1; //i为人的标号,初始值为1
j=0; //j为数的数字,当j=3时,对应的人出列
while(out < N) //out为已出列的人数,当out=N-1时,循环退出
{
if(flag[i] == 0) j++;
if(j == 3)
{
flag[i] = 1; //标志此人出列
j = 0; //重新开始数数字
out ++; //出列人数加1
}
i ++;
if(i == N) i = 0; //重新从1号人开始数
}
i = 1;
while(flag[i] == 1) i++;
printf("最后剩下的小孩为%d号!\n",i);
return 0;
}
② c语言 给出一个数怎样输出该数的全排列
C语言版:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
inta[10],book[10],n,k[10],l;
voiddfs(intstep)
{
inti=0;
if(step==l+1)
{
if(a[1]!=0)
{
for(i=1;i<=l;i++)
{
printf("%d",a[i]);
}
printf(" ");
}
return;
}
for(i=0;i<l;i++)
{
if(book[k[i]]==0)
{
a[step]=k[i];
book[k[i]]=1;
dfs(step+1);
book[k[i]]=0;
}
}
}
intmain(void)
{
memset(k,0,sizeof(k));
memset(book,0,sizeof(book));
intn;
scanf("%d",&n);
charbuf[15]="";
sprintf(buf,"%d",n);
l=strlen(buf);
inti=0;
for(i=0;i<l;i++)
k[i]=buf[i]-'0';
dfs(1);
system("pause");//如果通不过编译就试着删除这句话
return0;
}
C++版:
#include<cstdio>
#include<cstdlib>
#include<cstring>
inta[10],book[10],n,k[10],l;
voiddfs(intstep)
{
if(step==l+1)
{
if(a[1]!=0)
{
for(inti=1;i<=l;i++)
{
printf("%d",a[i]);
}
printf(" ");
}
return;
}
for(inti=0;i<l;i++)
{
if(book[k[i]]==0)
{
a[step]=k[i];
book[k[i]]=1;
dfs(step+1);
book[k[i]]=0;
}
}
}
intmain(void)
{
memset(k,0,sizeof(k));
memset(book,0,sizeof(book));
intn;
scanf("%d",&n);
charbuf[15]="";
sprintf(buf,"%d",n);
l=strlen(buf);
for(inti=0;buf[i]!='