蓝桥复习2
Posted liugangjiayou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥复习2相关的知识,希望对你有一定的参考价值。
项目一:九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
1 #include <stdio.h> 2 void test(int x[]) 3 { 4 int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; 5 int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; 6 7 if(a*3==b) printf("%d / %d ", a, b); 8 } 9 void f(int x[], int k) 10 { 11 int i,t; 12 if(k>=9){ 13 test(x); 14 return; 15 } 16 17 for(i=k; i<9; i++){ 18 {t=x[k]; x[k]=x[i]; x[i]=t;} 19 f(x,k+1); 20 _____________________________________________ // 填空处 21 } 22 } 23 24 int main() 25 { 26 int x[] = {1,2,3,4,5,6,7,8,9}; 27 f(x,0); 28 return 0; 29 }
结果:
1 #include <stdio.h> 2 3 void test(int x[]) 4 { 5 int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; 6 int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; 7 8 if(a*3==b) printf("%d / %d ", a, b); 9 } 10 11 void f(int x[], int k) 12 { 13 int i,t; 14 if(k>=9){ 15 test(x); 16 return; 17 } 18 19 for(i=k; i<9; i++){ 20 {t=x[k]; x[k]=x[i]; x[i]=t;} 21 f(x,k+1); 22 {t=x[k];x[k]=x[i];x[i]=t;}// 填空处 23 } 24 } 25 26 int main() 27 { 28 int x[] = {1,2,3,4,5,6,7,8,9}; 29 f(x,0); 30 return 0; 31 }
{t=x[k];x[k]=x[i];x[i]=t;}
项目二:加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
1 #include<stdio.h> 2 int main() 3 { 4 int sum=1225; 5 int tmp1,tmp2; 6 for(int i=1;i<47;i++) 7 { 8 tmp1=sum-(i+i+1)+(i*(i+1)); 9 for(int j=i+2;j<49;j++) 10 { 11 tmp2=tmp1-(j+j+1)+(j*(j+1)); 12 if(tmp2==2015) 13 printf("%d ",i); 14 } 15 } 16 return 0; 17 }
16
项目三:牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
dp[i][j]=∑k=j−4jdp[i−1][k]
1 #include <stdio.h> 2 typedef long long LL; 3 4 LL dp[14][14]; // dp[i][j]: 当前到第i张牌,总共有j张牌时的解的个数 5 6 int main() { 7 dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1; 8 9 for (int i = 2; i <= 13; i++) { 10 for (int k = 0; k <= 13; k++) { 11 if (k - 4 >= 0) dp[i][k] += dp[i-1][k-4]; 12 if (k - 3 >= 0) dp[i][k] += dp[i-1][k-3]; 13 if (k - 2 >= 0) dp[i][k] += dp[i-1][k-2]; 14 if (k - 1 >= 0) dp[i][k] += dp[i-1][k-1]; 15 dp[i][k] += dp[i-1][k]; 16 } 17 } 18 19 printf("%d",dp[13][13]); 20 return 0; 21 }
35981800
项目四:移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内
w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离。
w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离。
例如:
用户输入:
6 8 2
则,程序应该输出:
4
用户输入:
6 8 2
则,程序应该输出:
4
再例如:
用户输入:
4 7 20
则,程序应该输出:
5
用户输入:
4 7 20
则,程序应该输出:
5
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
1 #include <iostream> 2 3 #include <math.h> 4 5 using namespace std; 6 7 int main() 8 9 { 10 11 int w, m, n; 12 13 int i, j, k = 1; 14 15 int mi, mj, ni, nj; 16 17 cin >> w >> m >> n; 18 19 int arr[1001][w]; 20 21 for (i = 0; i<1001; i++) 22 23 { 24 25 if ((i + 1) % 2 != 0) 26 27 { 28 29 for (j = 0; j<w; j++) 30 31 { 32 33 arr[i][j] = k + j; 34 35 } 36 37 k = arr[i][j - 1]; 38 39 } 40 41 else{ 42 43 int f = 1; 44 45 for (j = w - 1; j >= 0; j--, f++) 46 47 { 48 49 arr[i][j] = k + f; 50 51 } 52 53 k = arr[i][0] + 1; 54 55 } 56 57 } 58 59 for (i = 0; i<1001; i++) 60 61 { 62 63 for (j = 0; j<w; j++) 64 65 { 66 67 if (arr[i][j] == n) 68 69 { 70 71 ni = i; 72 73 nj = j; 74 75 } 76 77 if (arr[i][j] == m) 78 79 { 80 81 mi = i; 82 83 mj = j; 84 85 } 86 87 } 88 89 } 90 91 int a = abs(mi - ni); 92 93 int b = abs(mj - nj); 94 95 printf("%d ",a+b); 96 97 return 0; 98 99 }
以上是关于蓝桥复习2的主要内容,如果未能解决你的问题,请参考以下文章