编程题 随机步法
编程题 随机步法
编写程序, 生成一种贯穿10x10字符数组 (初始时全为字符' . ')
的"随机步法". 程序必须随机的从一个元素出发, 随机的走的另一个元素.
每次都只能向上下左右中选一个方向, 走出一步. 已经走过的位置用A-Z标记.
下面是一个输出示例:
12345678910. . . . . . . . . .J I . . . . . . . .K H G . . . . . . .L E F . . . . . . .M D C . . . . . . .N O B A . . . . . .Q P . . . . . . . .R Y Z . . . . . . .S X W . . . . . . .T U V . . . . . . .
不能走出边界
不能走到走过的位置
最多走到Z
无法继续走时应停止并输出结果
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 ...
西农OJ P1073 阶乘TvT
1073: 阶乘
题目描述
给一个整数,请输出该数字阶乘的后缀0的个数,例如:
数字7,它的阶乘为5040,后面有一个0,则输出1;还有数字10,它的阶乘为3628800,后面有两个0,则输出2。
输入
第一行一个数据N,小于100,表示一共要输入n个数字,以后n行输入一个数字。
输出
对应于每一个输入,输出一个满足题目要求的数字。
样例输入
123456763601001024234568735373
样例输出
1234560142425358612183837
思路
不会有人要算出阶乘然后判断吧, 我开始写了一个计算阶乘,
还用了字符串存数字, 模拟手算. 然后发现自己是一个蠢蛋.
试问8735373的阶乘是多少捏.
正确思路是因式分解, 2和5可以凑出一个0. 因为是乘法, 0
不会变成其他数字, 因此0会越积越多.
这里举一个例子:
123410! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10分解因式10! = (1*1) * (1*2) * (1*3) * (2*2) * (1*5) * (2*3) * ...
西农OJ P1067 Humble Number
1067: Humble Number
题目描述
如果一个数只有素数因子2,3,5,7,那么这个数被称为“Humble
Number”。前20个“Humble
Number”是:1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27。经验证,2000000000以内的“Humble
Number”共有5842个。
你的任务是编写一个程序,根据要求输出序列中的某一个数。
如 22, 不能拆解为2a+3b+5c+7d=22, 因此22不是“Humble
Number”
输入
输入数据是一列整数,每行一个,表示要求输出的数再“Humble
Number”序列中的序数,输入的结束是一个数字0,这个数字不作处理。
输出
对于每一个输入的数字,输出“Humble
Number”数列中相应位置的数字,每个数字占一行。
样例输入
12345678910111213141234111213212223100100058420
样例输出
12345678910111213123412141528303245038587520 ...
MATLAB入门笔记
变量命名规则
区分大小写
长度小于64位
以字母开头, 可以由字母数字下划线组成
清空环境变量及命令
12clear all % 清空Workspace中的所有变量clc % 清空控制台
注释
1234%%注释%%%注释
数据类型
数字
字符和字符串
单引号加内容
1laoba = 'chihanbao'
abs函数 -> 获取ASCII码
1abs(laoba)
char函数 -> 获取ASCII对应的字符
1char(97)
num2str函数 -> 将数字转为字符数组
1num2str(123)
length函数 -> 获取字符串长度
1length(str)
矩阵
12A = [1 2 3; 4 5 6; 7 8 9]B = [1,2,3; 4,5,6; 7,8,9]
用逗号分隔一行上的元素, 用分号换行
矩阵转置
1B = A'
列矩阵
1C = A(:)
逆矩阵
1D = ...
西农OJ 2021阶段二考试
Problem A
用一维动态数组实现杨辉三角形
1234567891011121314unsigned int *createline(unsigned int *p, int line){ unsigned int * thisline = p+line*(line-1)/2; /* 指向当前行的首地址*/ unsigned int * brforeline = p+(line-1)*(line-2)/2; /* 指向前一行的首地址*/ /* 第一个和最后一个为1 */ *thisline = 1; *(thisline+line-1) = 1; /* 计算中间的部分 */ int i; for(i = 1; i < line-1; i++){ *(thisline+i) = *(brforeline+i-1)+*(brforeline+i); } /* 返回当前行首地址 */ return thisline;}
Problem B 二维数组调整
...
近况
近况
有一说一,最近有点摆烂.
首先是学校里的课程学习.马上就要期末考试了,还是有很多东西不会.尤其是英语和数电,这俩都没期中考,所以很慌.慌归慌,但没有一点行动,摆烂了.打算搞点往年的题看看.备考.
其次是C语言,这次C语言期中考试虽然满分了,但是期末考比期中难多了,我做了往年的题,我的水平肯定不能满分.我想满分,压力有点大.
最后就是备战竞赛.说实话我会的东西真的太少了.没有一点基础.这个只能从头开始.之前一直没什么进展,不知道该怎么学.最近在老师的建议下,搞了一本算法书在看,感觉还不错.希望能坚持下去.加油!
西农OJ P1491 城市电话号码
题目描述
某城市电话号码包括地区码、前缀、有效号码三部分组成,其中地区码是0-4位数字;前缀是以非0开头的3位数字,有效号码是4位数字,各部分之间用减号(-)分隔,地区码为空时地区码与前缀之间不包含分隔符。请编写函数检测输入号码num的有效性,若输入号码符合上述规定返回0,否则返回1。函数
原型定义如下:
1int CheckPhoneNum(char * num);
输入
地区码-前缀-有效号码
地区码是0-4位数字,地区码为空时地区码与前缀之间不包含分隔符
前缀是以非0开头的3位数字
有效号码是4位数字
题解
思路
由题可知,号码有两种类型. 有地区码 与
无地区码. 区别方式是判断有几个分隔符.
先判断号码类型,再判断是否合法.
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848 ...
西农OJ P1005 装载问题
装载问题
问题描述
有两艘船,载重量分别是c1、 c2,n个集装箱,重量是wi
(i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。
输入
多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi
(i=1…n)。n等于0标志输入结束。
输出
对于每个测例在单独的一行内输出Yes或No。
样例输入
123457 8 28 77 9 28 80 0 0
样例输出
12YesNo
解题思路
先计算出 c1 能放下的最大值 max , 若
c2-max >= 0 ,则能装下.
公式
$ f(c,n) = min{f(c,n-1),f(c-w[n],n-1)} $
其中 w 为 weight 集合.
公式计算背包容量剩余c,且剩余n个物品时, 最优解剩余的背包容量.
递归终点
物品数为0,或者背包装不下
我的代码
12345678910111213141516171819202122232425262728293031323334353637383940 ...
动态规划
动态规划
动态规划题目特点
计数
有多少种方式走到右下角
有多少中方法选出k个数使得和为Sum
求最大最小值
从左上角走的右下角路径上数字和的最大值
最长上升子序列长度
求存在性
取石子游戏,先手是否必胜
能不能选出k个数使得和为Sum
动态规划组成部分
确定状态
最后一步
子问题
比如买/不买。使用2元/5元/7元硬币等等,都对应一个状态f(x)
转移方程
确定f(x)的公式,如凑硬币问题:
\[f(x) =
min\{f(x-2),f(x-5),f(x-7)\}\]
\[f[x] =
min\{f[x-2],f[x-5],f[x-7]\}\]
初始条件和边界条件
何时(何种状态)初始化?何时(何种状态)无解?如凑硬币问题:
f[0] 状态初始化。
f[负数] 状态无解。
计算顺序
如凑硬币问题:
f[0],f[1],f[2]......
补充 - 凑硬币问题
你有3种硬币: 2r 5r 7r (硬币足够多)
买一个物品 n 元
如何用最少的硬币正好付清,不需要对方找钱?
这个是我写的代码,应该没啥问题:
12345678910111213141516 ...