zoukankan      html  css  js  c++  java
  • 拉丁方阵问题

    *问题分析与算法设计

      构造拉丁方阵的方法很多,这里给出最简单的一种方法。观察给出的例子,可以发现:若将每 一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由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;
    }
  • 相关阅读:
    POJ-2456(二分+贪心)
    二分的神奇边界
    最大值最小化
    HDU6231(二分+尺取)
    POJ 1321
    document操作例题1-延迟注册与二级菜单
    DOM2-document操作
    DOM1-基本概念及window操作
    函数递归调用
    JS基础4-函数
  • 原文地址:https://www.cnblogs.com/ncuhwxiong/p/6934111.html
Copyright © 2011-2022 走看看