模拟(1)
今天看了下模拟的题。模拟就是给你一个目标让你(建立数学模型)通过代码去实现它。
感觉大部分都还比较简单。
做模拟啊,读题很重要,主要是分析题目的要求。
http://bailian.openjudge.cn/practice/3750/
啊,就比如说这道题(当然我没做),能体会到阅读理解的绝望吗
正常(简单)一点的模拟:
http://www.fjutacm.com/Problem.jsp?pid=1861
其实就是给你条件,写出相应的代码,没了。
神奇的幻方也算是模拟(就拿一道才做的题):
幻方是一个很神奇的 N×N 矩阵,它的每行、每列与对角线,加起来的数字和都是相同的。我们可以通过以下方法构建一个幻方。(阶数为奇数)
-
第一个数字写在第一行的中间
-
下一个数字,都写在上一个数字的右上方:
- 如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列
- 如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行
- 如果该数字在右上角,或者该数字的右上方已有数字,则下一个数字写在该数字的下方
输入格式
一个数字 NN(N≤20N≤20)。
输出格式
按上方法构造的 (2N−1)×(2N−1)(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; }
大概就是这样,还有其他类型的题做了再补充。