2014
武功秘籍 (小学题...)猜字母 (约瑟夫环)大衍数列 (小学题...)打印图形 (代码填空题)神奇算式 (模拟 - 字符串转换 - 分解)绳圈 (难 - dp) 但可以猜分糖果 (模拟)地宫寻宝 (dfs)小朋友排身高 (树状数组 - 区间和数组 - 模板) 2014年总结
2014 武功秘籍 (小学题…)2000多页的武功秘籍 (注意有1000页 , 常识!!!:然后1001-1002页与1 - 2 是连在一起的)
书的10与11在同一张纸张上,第11和12页不在同一张纸张上
要想取走书的81到92页的武功,至少要撕下多少张纸带走
答案为7
*/
#define N 70 void f(char a[][N], int rank, int row, int col) { if(rank==1){ a[row][col] = '*'; return; } int w = 1; int i; for(i=0; i神奇算式 (模拟 - 字符串转换 - 分解) 由4个不同数字组成一个乘法算式,它们的乘积仍然由这4个数字组成
如:
210 * 6 = 1260
8 * 473 = 3784
27 * 81 = 2187
如果满足乘法交换律算作同一种情况,那么包含共有多少种 (坑点)
填写该数字int ans = 0; #include #include#include bool check(int src,int r) { //bug == 18 ,答案 12种 //先转字符串 排序 比较 string src_str , r_str; stringstream ss; ss << src; //整型 ss >> src_str; //转字符串 stringstream ss1; ss1 << r; // 注意先 << 整型 !! ss1 >> r_str; // 再 >> 字符串 !! sort(r_str.begin(),r_str.end()); sort(src_str.begin(),src_str.end()); if(r_str == src_str){ return true; } return false; } int test_04() { //一个小技巧 j = 2,k = 3 先打断点 j = 2时取消断点,再断k处 for(int i = 1; i < 10; i++) { //第一位不能为0!!! for(int j = 0; j < 10; j++) { if(i != j) { for(int k = 0; k < 10; k++) { if(k != i && k != j) { for(int l = 0; l < 10; l++) { if(l != k && l != i && l != j) { // *可以插入在三个位置 int src = i*1000 + j*100 + 10 * k + l; //验证 右式 if(j != 0) { //注意拆数字,乘法除法运算,每个数字最高位不能为0 !!! int r1 = i * (j *100 + k * 10 + l); if(check(src,r1)) { ans++; } } if(k != 0) { int r2 = (i*10+j) * (k * 10 + l); if((i*10+j) < (k * 10 + l) &&check(src,r2)) { ans++; } } //之前肯定已经出现过了 1位 * 3位 == 3位 * 1位 if(l != 0) { int r3 = (i * 100 + j * 10 + k) * l; if(check(src,r3)) { ans++; } } //这段可略 } } } } } } } cout << ans << endl; return 0; } // ~引用 #include int main() { int a[101],n,i,count=0,flag=0;//定义数组,用来储存小朋友的糖数,count定义为老师需要补发的糖数,初始为0,flag为判断是否所有小朋友糖数都相等的标志。 scanf("%d",&n);//输入N,小朋友的个数。 a[0]=0;//把a[0]定义为一个类似于缓冲区的东西,用于暂时的存放数据。 for(i=1;i<=n;i++) scanf("%d",&a[i]);//为方便起见,把a[i]直接就看成第i个小朋友 。 while(!flag)//flag初始为0,即现在每人糖数不相等,需要进行以下操作进行重新分配。(即使现在糖数相同时 以下的操作也不影响目前的每个人的糖数,因为在每人都相等的情况下,无论进行多少次分配都不会改变数据。) { a[0]=a[1]/2;//缓冲区存放第一个小朋友的 for(i=1;i 地宫寻宝 (dfs) 【题目描述】
X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入
输入一行3个整数,用空格分开:n m k (1< =n,m< =50, 1< =k< =12)
接下来有 n 行数据,每行有 m 个整数 Ci (0< =Ci< =12)代表这个格子上的宝物的价值
输出
要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。输入:
2 2 2
1 2
2 1
输出:
2
输入2:
2 3 2
1 2 3
2 1 5
输出2:
14/ //合并为一步 cnt[i] += getSum(c,h[i]); //求出小于h[i]+1的数据的个数 } for(int i = 0; i < n; i++) { ans += cnt[i]*((cnt[i]-1) / 2); //先除2减小数值 } printf("%llin",ans); return 0; }2014年总结01 武功秘籍 不用运算 ,考验思维(小学题)
02 等额本金 (小学题)
03 猜字母 数组的操作 (挪动数列) – (约瑟夫环)
04 大衍数列 奇偶数
05 打印图形 递归 上下文推测 - 参数的含义(图形规律)
06 神奇算式 枚举 -(字符串排序 比较)
07 神圈 数学归纳 dp推导 (难***)
08 分糖果 模拟
09 地宫取宝 深搜dfs (模板**) 子问题重复求解
10 小朋友排队 (最难****) 树状数组妙用int main() { test_08(); return 0; }



