模拟(1)

今天看了下模拟的题。模拟就是给你一个目标让你(建立数学模型)通过代码去实现它。

感觉大部分都还比较简单。

做模拟啊,读题很重要,主要是分析题目的要求。

http://bailian.openjudge.cn/practice/3750/

啊,就比如说这道题(当然我没做),能体会到阅读理解的绝望吗

正常(简单)一点的模拟:

http://www.fjutacm.com/Problem.jsp?pid=1861

其实就是给你条件,写出相应的代码,没了。

神奇的幻方也算是模拟(就拿一道才做的题):

幻方是一个很神奇的 N×N 矩阵,它的每行、每列与对角线,加起来的数字和都是相同的。我们可以通过以下方法构建一个幻方。(阶数为奇数)

  1. 第一个数字写在第一行的中间

  2. 下一个数字,都写在上一个数字的右上方:

    • 如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列
    • 如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行
    • 如果该数字在右上角,或者该数字的右上方已有数字,则下一个数字写在该数字的下方

输入格式

一个数字 NN(N20N≤20)。

输出格式

按上方法构造的 (2N1)×(2N1)(2N−1)×(2N−1) 的幻方。

好像没什么需要动脑子的地方?代码如下:

#include<stdio.h>
#include<math.h>
int n,a[40][40],x,y;
int main(){
    scanf("%d",&n);
    int m=2*n-1;
    x=1,y=(m+1)/2;
    for(int i=1;i<=m*m;i++){
        a[x][y]=i;
        if(!a[(x-2+m)%m+1][y%m+1])
        x=(x-2+m)%m+1,y=y%m+1;
        else x=x%m+1;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
} 

大概就是这样,还有其他类型的题做了再补充。

posted @ 2021-01-19 23:58  Untergehen  阅读(64)  评论(0编辑  收藏  举报