• 拉丁方阵问题


    *问题分析与算法设计

      构造拉丁方阵的方法很多,这里给出最简单的一种方法。观察给出的例子,可以发现:若将每 一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照 此规律可以很容易的写出程序。下面给出构造6阶拉丁方阵的程序。

    编程技巧:环形输出数字:t = (i + j) % n

    代码如下:

    #include<stdio.h>
    int main() {
        int n,i,j,k,t;
        scanf("%d",&n);
        for(j=0;j<n;j++){
            for(i=0;i<n;i++){
                t = (i+j)%n;
                for(k=0;k<n;k++){
                    printf("%d",(k+t)%n+1);
                }
                printf("
    ");
            }
            printf("
    ");
        }
        return 0;
    }

    方法二、使用循环链表来实现,代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node {
        int data;
        struct node *next;
    }sqlist,*linklist;
    
    // 创建链表
    linklist CreateLinkList(int CardNumber) {
        linklist head = NULL;
        linklist s,r;
        int i;
        r = head;
        for(i=1;i<=CardNumber;i++) {
            s = (linklist)malloc(sizeof(sqlist));
            s->data = i;
            if(head==NULL){
                head = s;
            }else {
                r->next = s;
            }
            r = s;
        }
        r->next = head;
        return head;
    }
    int main()
    {
        linklist p;
        int n,i,j;
        printf("请输入方阵的规模:");
        scanf("%d",&n);
        p = CreateLinkList(n);
        i = n;
        while(i--){
            j = n;
            while(j--){
                printf("%d ",p->data);
                p = p->next;
            }
            printf("
    ");
            p = p->next;
        }
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    js中new的本质
    js中真伪数组转换
    2 DC电参数测试 (1)
    1 开短路测试
    2月书单 《编码隐匿在计算机软硬件背后的语言》 21-25章
    2月书单 《编码隐匿在计算机软硬件背后的语言》 17-20章
    时间的掌控
    数码管的秘密
    会眨眼的小灯
    点亮一盏灯
  • 原文地址:https://www.cnblogs.com/ncuhwxiong/p/6934111.html
Copyright © 2020-2023  润新知