① 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]!='