2014年北航机考题(推免)
2016-06-25 16:22
267 查看
2014.
第一题,阶乘数。
输入一个正整数,输出时,先输出这个数本身,跟着一个逗号,再输出这个数的各位数字的阶乘和,等号,
阶乘和的计算结果,并判断阶乘和是否等于原数,如果相等输出Yes,否则输出No。题目说明输入的正整数
以及其各位阶乘和都不会超出int型的表示范围。
输入样例1:
145
输出样例1:
145,1!+4!+5!=145
Yes
输入样例2:
1400
输出样例2:
1400,1!+4!+0!+0!=27
No
第二题,五子棋。
输入一个19*19的矩阵,只包含数字0、1、2,表示两人下五子棋的棋牌状态,1、2分别表示两人的棋子,0表示空格。
要求判断当前状态下是否有人获胜(横向、竖向或者斜线方向连成5个同色棋子)。题目说明输入样例保证每条线上至多
只有连续5个同色棋子,并且保证至多只有1人获胜。如果有人获胜,输出获胜者(1或2)加一个冒号,接着输出获胜的
五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出no。
第一题,阶乘数。
输入一个正整数,输出时,先输出这个数本身,跟着一个逗号,再输出这个数的各位数字的阶乘和,等号,
阶乘和的计算结果,并判断阶乘和是否等于原数,如果相等输出Yes,否则输出No。题目说明输入的正整数
以及其各位阶乘和都不会超出int型的表示范围。
输入样例1:
145
输出样例1:
145,1!+4!+5!=145
Yes
输入样例2:
1400
输出样例2:
1400,1!+4!+0!+0!=27
No
#include <stdio.h> #include <stdlib.h> double fun(int x) { double sum = 1; for(int i=1;i<=x;i++){ sum *= i; } return sum; } int main() { int x; int a[10]; int i=-1; int temp; int flag = 0; double sum = 0; scanf("%d",&x); temp = x; while(x>=1){ a[++i] = x%10; x = x/10; } for(int j=i;j>=0;j--){ printf("%d!",a[j]); if(flag<i)printf("+"); sum += fun(a[j]); flag++; } printf("=%f\n",sum); if(sum==temp)printf("YES"); else printf("NO"); }
第二题,五子棋。
输入一个19*19的矩阵,只包含数字0、1、2,表示两人下五子棋的棋牌状态,1、2分别表示两人的棋子,0表示空格。
要求判断当前状态下是否有人获胜(横向、竖向或者斜线方向连成5个同色棋子)。题目说明输入样例保证每条线上至多
只有连续5个同色棋子,并且保证至多只有1人获胜。如果有人获胜,输出获胜者(1或2)加一个冒号,接着输出获胜的
五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出no。
#include <stdio.h> #include <stdlib.h> #define maxn 19 int main() { //int a[19][19]; int flag = 0; FILE *fp; /*for(int i=0;i<19;i++) for(int j=0;j<19;j++) scanf("%d",&a[i][j]);*/ fp = fopen("E:\\U盘\\1.txt","r");//打开文件 注意要用双斜杠 int a[maxn][maxn]; for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) fscanf(fp,"%d",&a[i][j]); for(int i=0;i<19;i++) for(int j=0;j<19;j++){ if(a[i][j]!=0){ for(int k=i;k<i+5;k++){ if(a[i][j]==a[k][j]) flag++; } if(flag==5){ printf("获胜者%d:%d %d",a[i][j],i,j); goto loop; } flag = 0; for(int k=j;k<j+5;k++){ if(a[i][j]==a[i][k]) flag++; } if(flag==5){ printf("获胜者%d:%d %d",a[i][j],i,j); goto loop; } flag = 0; for(int k=i,l=j;k<i+5&&l<j+5;k++,l++){ if(a[i][j]==a[k][l]) flag++; } if(flag==5){ printf("获胜者%d:%d %d",a[i][j],i,j); goto loop; } flag = 0; for(int k=i,l=j;k<i-5&&l<j-5&&k>=0&&l>=0;k--,l--){ if(a[i][j]==a[k][l]) flag++; } if(flag==5){ printf("获胜者%d:%d %d",a[i][j],i,j); goto loop; } flag = 0; } } loop:printf(""); if(flag!=5){ printf("NO!"); } }
相关文章推荐
- Valid Parentheses 合法括号
- js基本语法介绍
- android设置背景色为透明
- <<数字信号通信>>问题列表
- 一个简单的账号密码输入框
- 打好Android基础,实战中运用基础
- MySQL Having的使用方法
- iptables的地址取反操作
- 【每天一道leetcode】1:N-Queens
- 实验:基本的系统安全控制 实验环境 某公司新增了一台企业级服务器,已安装运行RHEL 6操作系统,由系统运维部、软件开发部、技术服务部共同使用。由于用户数量众多,且使用时间不固定,要求针对账号和
- preset 与编码速度和质量相关
- 使用React Native一年后的感受
- Android Studio 获取 sha1、MD5签名
- 在屏幕上输出以下图案: * *** ***** ******* ********* *********** ************* ********
- 6月份英语学习总结
- nginx之访问日志文件自动切割
- 默认勾选以太网不能够联网的问题
- 剑指offer-面试6:重建二叉树(二叉树前中后序遍历)
- 递归和归纳
- 【English】In June ,Meet My 365