关于魔方的语言

关于魔方的语言,第1张

你现在能自己还原魔方么?

如果你用层先法复原,那么你一定知道步骤

1,底面十字

2,底面

3,两层

4,顶十字

5,顶面

再用至少两步复原。

oll pll 是高级复原法的语言

高级复原法简称CFOP

C:cross就是底面十字

F:fll就是用一步把底面和两层一块拧出来

O:oll不用在顶面作十字,直接拧全面

P:pll顶面拧完后,一步还原六面。

CFOP公式很多有一百多个,鄙人也在学习中。。。

希望你早日学会!!Good luck

其实这个只能实现奇数阶的魔方阵输出

奇数阶的魔方阵有如下规律,根据这个规律编程就是LZ所写的代码了,LZ根据规律来看代码就应该可以清楚了

算法:

魔方阵的排列规律(奇数阵):

⑴将1放在第一行中间一列。

⑵从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1。

⑶如果上一个数的行数为1,则下一个数的行数为n,列数加1。如果上一个数的列数的n时,下一个数的列数为1,行数减1。

⑷如果按上面的规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。

for (r=2;r<=nn;r++) /从2开始排到nn /

if (a[(i+n-1)%n][(j+1)%n]==0)

/判断下一个位置是否已经排了数,如果为0,则没有排,位置空,这时可以把r的值放上去。/

{

i=(i+n-1)%n; /把该位置行数值赋给i/

j=(j+1)%n; /把该位置列数值赋给j/

a[i][j]=r; /把r值排到该位置上/

}

else /如果下一位置不为0,则已安排了其它数,这时只能把r值安排在上一个数的下方的位置/

{

i=(i+1)%n;/ 行数+1 /

a[i][j]=r; /把r值放到该位置/

}

这里要说的是行数上移一层,用(i-1+n)%n,取余,之所以加n是不让行数值为负值,加n不会影响余数。而列数加1不会出现负的情况,所以不用加n。

#include <stdioh> #define max 255 int main(){ int aa[max][max] = {0}, n, x,y, num; scanf("%d", &n); if(n>=0){ num=1; x=n%2==0n/2-1:n/2; y=n-1; while(num<=nn){ aa[x][y]=num++; if(aa[x+1>=nx+1-n:x+1][y+1>=ny+1-n:y+1] > 0){ y-=1; } else { x = x+1>=nx+1-n:x+1; y = y+1>=ny+1-n:y+1; } } for(x=0; x<n;x++){ for(y=0;y<n;y++) printf("%2d ", aa[x][y]); printf("\n"); } } } 这种规则只适用于n为奇数,偶数就错了。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/2972781.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-01-25
下一篇2024-01-25

发表评论

登录后才能评论

评论列表(0条)

    保存