C语言编程题-洗牌

C语言编程题-洗牌,第1张

我解决了这个问题,程序如下:

注意:n不能大于500,否则你就得数组A和B的大小

#include <stdio.h>

int A[1000],B[500]

void main()

{

int m,n,i

int flag(int)

void exchange(int)

printf("input n:")

scanf("%d",&n)

for(i=0,m=n*2i<mi++) A[i]=i

i=0

do {exchange(n)i++}

while(flag(m))

printf("Times: %d",i)

}

void exchange(int n)

{

int i

for(i=0i<ni++)

B[i]=A[i+n]

for(i=n-1i>=0i--)

A[i*2+1]=A[i]

for(i=0i<ni++)

A[i*2]=B[i]

}

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

int n,a[20],b[20],c[20],n2

void init()

{int i,j,k,t

 for(i=0i<n2i++)

   a[i]=i+1

 srand(time(0))

 for(i=0,j=n2i<jj--)

 {k=rand()%j

  t=a[j-1]a[j-1]=a[k]a[k]=t

 } 

 for(i=0i<n2i++)

   c[i]=a[i]

}

void prt()

{for(int i=0i<n2i++)

 {printf("%3d",a[i])

  if(i==n-1)printf("  ||")

 }

 printf("\n")

}

void work()

{int i,t

 for(i=1i<n2-1i++)

   {t=i<n?i+i:(i+i)%n2+1

    b[t]=a[i]

 //   printf("b[%d]=a[%d]\n",(i+i)%n2+1,i)

}

 for(i=1i<n2-1i++)

   a[i]=b[i]

}

bool done()

{for(int i=1i<n2i++)

   if(a[i]!=c[i])return false

 return true  

}

int main()

{scanf("%d",&n)

 n2=n+n

 init()

 prt()

 do

 {work()

  prt()

 }while(!done())

 return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7796282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存