【ACM暑假培训】3、模拟算法(99乘法表+方块转换+循环数)
来源:互联网 发布:网络变压器图片 编辑:程序博客网 时间:2024/09/21 09:20
模拟算法
准确的定义:
模拟整个过程,通过改变数学中模型的各种参数,进而观察变更这些参数所引起过程状态的变化。
我的理解:
所谓模拟,即使程序完整的按题目所叙述的方式运行,最终得出答案。
1、For循环练习题
九九乘法表
输出格式整齐的九九乘法表
样例输出:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
#include<stdio.h>void main(){for(int a=1;a<10;a++){ for(int b=1;b<=a;b++) printf("%d*%d=%d ",b,a,a*b); printf("\n");}}
2、Transformations
方块转换
译by TinyTony
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始
图案按照以下列转换方法转换成新图案的最小方式:
#1:转90度:图案按顺时针转90度。
#2:转180度:图案按顺时针转180度。
#3:转270度:图案按顺时针转270度。
#4:反射:图案在水平方向翻转(形成原图案的镜像)。
#5:组合:图案在水平方向翻转,然后按照#1-#3之一转换。
#6:不改变:原图案不改变。
#7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
PROGRAM NAME: transform
INPUT FORMAT
第一行:
单独的一个整数N。
第二行到第N+1行:
N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行:
N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
SAMPLE INPUT(file transform.in)
3
@-@
---
@@-
@-@
@--
--@
OUTPUT FORMAT
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的
转换方法。
SAMPLE OUTPUT (file transform.out)
1思路:
我没有采用最常规的方法,
最常规的方法是:将a,b数组中字符按规律逐个比较,每个对应一个函数,如果完全一致则输出的#x,
这种方法写的程序往往看上去长而且乱,故我没有采用
我的方法是:将a,b数组中的字符逐个比较,但不写函数,而是记录下相同字符的个数,如果相同字符个数等于总个数,说明它们完全相同,则输出对应的#x。
#include<stdio.h>char a[11][11]={0};char b[11][11]={0};int n[11]={0};int N;void compare(){ for(int i=0;i<N;i++)for(int j=0;j<N;j++){ if(a[j][N-1-i]=b[i][j])n[1]++; if(a[N-1-i][N-1-j]=b[i][j])n[2]++; if(a[N-1-j][i]=b[i][j])n[3]++; if(a[i][N-1-j]=b[i][j]) n[4]++; if(a[N-1-j][N-1-i]=b[i][j])n[5]++; if(a[N-1-i][j]=b[i][j])n[8]++; if(a[j][i]=b[i][j])n[9]++; if(a[i][j]=b[i][j])n[6]++;} for(i=1;i<10;i++) { if(n[i]==N*N&&i!=8&&i!=9) { printf("%d\n",i); break; } else if(n[i]==N*N&&i==8||i==9) {printf("5\n");break; } else { printf("7\n");break; } } }void main(){ int i;scanf("%d",&N);getchar();for(i=0;i<N;i++){for(int j=0;j<N;j++)scanf("%c",&a[i][j]);getchar();} for(i=0;i<N;i++){for(int j=0;j<N;j++)scanf("%c",&b[i][j]);getchar();}compare();}
3、RunaroundNumbers
循环数
译 by Henry HuGang
循环数是那些不包括0这个数字的没有重复数字的整数 (比如说, 81362) 并且同时具有一个有趣的性质, 就像这个例子:
· 如果你从最左边的数字开始 ( 在这个例子中是8) 数最左边这个数字个数字到右边(回到最左边如果数到了最右边),你会停止在另一个新的数字(如果没有停在一个不同的数字上,这个数就不是循环数). 就像: 8 1 3 6 2 从最左边接下去数8个数字: 1 3 6 2 8 1 3 6 所以下一个数字是6.
· ==0){flag[a[k]]=1; k=(k-(a[k]%len)+len)%len;}elseflag1=1;}if(flag1==0)yes=1;else yes=0;}void main(){ int M,m; scanf("%d",&M); //M=34567; m=M-1; while(yes==0) { m++; find(m); } printf("%d\n",m);}重复这样做 (这次从“6”开始数6个数字) 并且你会停止在一个新的数字上: 2 8 1 3 6 2, 也就是2.
· 再这样做 (这次数两个): 8 1
· 再一次 (这次一个): 3
· 又一次: 6 2 8 这是你回到了起点, 在从每一个数字开始数1次之后. 如果你在从每一个数字开始数一次以后没有回到起点, 你的数字不是一个循环数。
给你一个数字 M (在1到8位之间), 找出第一个比 M大的循环数。
PROGRAM NAME: runround
INPUT FORMAT
仅仅一行, 包括M
SAMPLE INPUT (file runround.in)
81361
OUTPUT FORMAT
仅仅一行,包括第一个比M大的循环数。
SAMPLE OUTPUT (file runround.out)
81362
附样例2:
输入:
34567
输出:
34792
#include<stdio.h>int a[100]={0};int yes=0;void find(int m){int m1=m,len=0,flag1=0; int flag[100]={0};for(int i=0;m1>0;i++){ a[i]=m1%10; if(a[i]==0) { flag1=1; break; } m1=m1/10; len++;}int k=len-1;for(i=0;i<len&&flag1==0;i++){//printf("flag:%d %d\n",flag[a[k]],a[k]);if(flag[a[k]]==0){flag[a[k]]=1; k=(k-(a[k]%len)+len)%len;}elseflag1=1;}if(flag1==0)yes=1;else yes=0;}void main(){ int M,m; scanf("%d",&M); //M=34567; m=M-1; while(yes==0) { m++; find(m); } printf("%d\n",m);}
- 【ACM暑假培训】3、模拟算法(99乘法表+方块转换+循环数)
- 【ACM暑假培训】递归算法3:跳棋的挑战(八皇后问题)
- 【ACM暑假培训】1、穷举算法
- poj 1047 模拟(含大数乘法)循环数
- ACM暑假培训总结
- 【ACM暑假培训】递归算法4:马踏棋盘
- Java(循环语句作业)反序输出、万年历、回文数、99乘法口诀表、素数
- 【ACM暑假培训】2、递归算法···放苹果···
- 【ACM暑假培训】递归算法2:数字全排列+字符串全排列
- [USACO1.2]方块转换 Transformations 模拟
- 循环嵌套--99乘法表
- JavaScript循环99乘法表
- 第三章数程序设计初步--循环结构项目3乘法口诀表
- 99乘法表 (输入一个数,以该数为行数输出乘法表)
- P1467 循环数 Runaround Numbers(模拟)
- 暑假经历之ACM培训第六天经验总结
- 2011年暑假ACM培训总结及省赛感悟
- ACM暑假培训——贪心、动态规划专题
- C程序存储区扫盲
- Class.getResource与Class.getClassLoader.getResource
- [Ubuntu] apt-get: Package has no installation candidate
- 20/7/2012 ICPC培训 第五天
- 优先级口诀
- 【ACM暑假培训】3、模拟算法(99乘法表+方块转换+循环数)
- poj1125
- hdu Repository(字典树)
- 算法——动态规划
- 关于已经上线项目的升级的启示
- hdu 1010
- Spring学习笔记 使用XML配置实现Bean的auto-wiring (自动绑定)
- 坦克大战0.0-0.4
- 测试管理以及与自动化测试的完美结合 - 1