北航上机复试2012-第一题-第二题-第三题
来源:互联网 发布:爱丽丝伪娘团 淘宝 编辑:程序博客网 时间:2024/04/29 10:40
【问题描述】
某些整数能分解成若干个连续整数的和的形式,例如
15 = 1 + 2+3+4+5
15 = 4 + 5 + 6
15 = 7 + 8
某些整数不能分解为连续整数的和,例如:16
输入:一个整数N(N <= 10000)
输出:整数N对应的所有分解组合,按照每个分解中的最小整数从小到大输出,每个分解占一行,每个数字之间有一个空格(每行最后保留一个空格);如果没有任何分解组合,则输出NONE。
【解题思路】
我认为这个题目有一些问题,整数包括正整数负整数和0,这样每一个正整数n都可以分解为 –(n-1), -(n-2), ……, -1, 0, 1, 2, ……, n;每一个负整数-n都可以分为-n, -(n-1), -(n-2), ……,-1, 0, 1, ……,n-1;0不可以分解为连续的整数。
【问题描述】
小岛面积
1 1 1 1 1 1
1 1 0 0 0 1
1 0 0 0 1 0
1 1 0 1 1 1
0 1 0 1 0 0
1 1 1 1 1 1
上面矩阵的中的1代表海岸线,0代表小岛。求小岛面积(即被1中包围的0的个数)。注意:仅求这样的0,该0所在行中被两个1包围,该0所在列中被两个1包围。
输入:
第一行输入一个整数N,表示输入方阵的维数
输入一个N维方阵
输出:
小岛面积
样例输入:
6
1 1 1 1 1 1
1 1 0 0 0 1
1 0 0 0 1 0
1 1 0 1 1 1
0 1 0 1 0 0
1 1 1 1 1 1
样例输出:
8
【解题思路】
设立了一个L,R,U,D矩阵,如果矩阵中第i行第j列为1表示该点左边有海,同理生成R,U,D矩阵,若满足LRUD矩阵都为1而且本身也是陆地的话那么该点是小岛。
【代码】
#include <stdio.h>const int maxn = 110;int L[110][110];int R[110][110];int U[110][110];int D[110][110];int mat[110][110];int main() {int n, i, j, ans = 0;int flag = 0;freopen("A.txt", "r", stdin);scanf("%d", &n);for(i = 0; i < n; i++) {for(j = 0; j < n; j++) {scanf("%d", &mat[i][j]);}}//Lfor(i = 0; i < n; i++) {flag = 0;for(j = 0; j < n; j++) {if(mat[i][j] == 1) flag = 1;if(flag) L[i][j] = 1;else L[i][j] = 0;}}//Rfor(i = 0; i < n; i++) {flag = 0;for(j = n-1; j >= 0; j--) {if(mat[i][j] == 1) flag = 1;if(flag) R[i][j] = 1;else R[i][j] = 0;}}//Ufor(j = 0; j < n; j++) {flag = 0;for(i = 0; i < n; i++) {if(mat[i][j] == 1) flag = 1;if(flag) U[i][j] = 1;else U[i][j] = 0;}}//Dfor(j = 0; j < n; j++) {flag = 0;for(i = n-1; i >= 0; i--) {if(mat[i][j] == 1) flag = 1;if(flag) D[i][j] = 1;else D[i][j] = 0;}}for(i = 0; i < n; i++) {for(j = 0; j < n; j++) {if(L[i][j] && R[i][j] && U[i][j] && D[i][j] && mat[i][j] == 0) ans++;}}printf("%d\n", ans);return 0;}
【统计关键字出现位置】
输入:
一行标准c语言代码(字符个数小于300),统计出该字符串中关键字的if,while,for所在的位置,按照关键字出现的顺序依次输出。注意双引号内的不需要统计。
输入:一行标准c语言代码,字符个数小于300
输出:
关键字if,while,for对应的位置,按照关键字出现的顺序依次输出。输出格式为:关键字,后跟冒号,然后是出现的位置。扫描到关键字就输出,每个输出占一行。
样例输入:
#include <stdio.h> int main() {int i= 0; if(i == 0) printf("YES"); return 0;}
#include <stdio.h> int main() {int ifwhile = 0; int forif = 1;charif_for_while = 'a';char *str = "while"; while(ifwhile == 0) {ifwhile= 1;forif = 0;} if(forif == 0) {if_for_while = 'b';} if(ifwhile == 1) {if_for_while= 'c';} return 0;}
样例输出:
if:43
while:88
if:133
if:170
【分析】
1. 出题人可能搞错了,第二个样例的答案应该是while:108 if:153 if:170
2. 观察到每一个if和while和for后面跟着一个括号,因此按照“if(”,“while(”,“for(”来匹配。
#include <string.h>
#include <stdio.h>
char s[302];
main()
{int valid;
int i, j, k, l, m, n, w;
freopen("2012_3_string.txt","r",stdin);//
i = 0, w = 0;
while( gets(s) ){
l = strlen(s);
//cout << l << endl;
valid = 1;
for(i=0;i<l;i++){
if( s[i] == '"' ) valid = 1 - valid; //遇到双引号
if( !valid ) continue;
if( s[i] == 'i' ){
if( s[i+1] == 'f'
&& ( s[i+2] == ' ' || s[i+2] == '(' )
&& ( s[i-1] == ' ' || s[i-1] == ';' ) )
printf("if:%d\n",i+1);
}
else if( s[i] == 'w' ){
if( s[i+1] == 'h' && s[i+2] == 'i' && s[i+3] == 'l' && s[i+4] == 'e'
&& ( s[i+5] == ' ' || s[i+5] == '(' )
&& ( s[i-1] == ' ' || s[i-1] == ';' ) )
printf("while:%d\n",i+1);
}
else if( s[i] == 'f' ){
if( s[i+1] == 'o' && s[i+2] == 'e'
&& ( s[i+3] == ' ' || s[i+3] == '(' )
&& ( s[i-1] == ' ' || s[i-1] == ';' ) )
printf("for:%d\n",i+1);
}
}
}
}
- 北航上机复试2012-第一题-第二题-第三题
- 2011年北航计算机复试上机题
- 北航计算机复试上机题(2008)
- 北航计算机复试上机题(2009)
- 北航复试上机14真题
- 北航复试上机14真题
- 北航上机复试13真题
- 2011年北航计算机复试上机题及代码
- 2011年北航计算机复试上机题代码
- ZJU 09 复试上机 第二题
- ZJU 09 复试上机 第一题
- ZJU 09 复试上机 第三题
- 2012北京邮电复试上机题
- 2012年北理复试上机题
- 北航14年上机题
- 清华大学2001年复试上机题 第二套 解题报告
- 清华大学2002年复试上机题 第二套 解题报告
- 清华大学2001年复试上机题 第一套 解题报告
- 使用SharedPreferences读写数据
- 知识与经验积累
- PHP5.5正式版发布,不再支持Windows XP
- MPI[1]
- c++指针|指针入门
- 北航上机复试2012-第一题-第二题-第三题
- 腾讯笔试题(1)
- 谷歌浏览器的翻译设置-一律不翻译如何恢复
- vmware安装ubuntu13版本的vm tools时遇到的错误解决
- Uva-111-History Grading
- 【.9.img】android 制作9.png图片
- uestc oj 1761 船长多少岁
- 给女友写得图片滚动代码。
- php 时间