CCF认证 - 201609-2 - 火车购票 C语言代码实现(90分)
2019-03-10 21:37
190 查看
#include<stdio.h> int main() { int n, a[100] = {0}, seat[20][5] = {0}, num, ls = 5, flag = 0, tag = 0;//数组seat表示座位的占用情况; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &a[i]); int zuohao[20][5], count = 1; for(int i = 0; i < 20; i++) for(int j = 0; j < 5; j++) zuohao[i][j] = count++;//数组zuohao记录座号; for(int i = 0; i < n; i++) { num = a[i];//num记录当前购票数; tag = 0; for(int h = 0; h < 20; h++) { for(int l = 0; l < 5; l++) { if(seat[h][l] == 1) { ls--; //continue; //解释因为加continue而引起的错误: //加入continue的本意是跳过当前行中 //已被占用的座位,但导致了:当一行中 //所有的位置被占满时,第18行的for循环 //直接结束,从而导致ls = 5无法执行,即 //ls无法进行初始化,导致下一次第15行for //循环执行时,ls的值不为5,所以执行到第 //39行跳出,即少进行了一次for循环,从而 //导致了座位会空出一行。 //若不加continue,则可以达到正确结果, //不过执行的代码也相应增多; }//若座位被占,则当前行的剩余座位数减一; if(ls < num) { ls = 5; break; }//若剩余座位数不足,则直接跳到下一行; if(seat[h][l] == 0 && ls >= num) { for(int k = l; k < l + num; k++) if(seat[h][k] == 1) { flag = 1; break; } if(flag == 0) { for(int j = l; j < l + num; j++) { seat[h][j] = 1; printf("%d ", zuohao[h][j]); tag = 1; }//分配座位; printf("\n"); ls = 5; } } flag = 0; if(tag == 1) break;//tag为1说明当前座位分配完成,可以进行下一个分配; } if(tag == 1) break;//tag为1说明当前座位分配完成,可以进行下一个分配; } } /* for(int i = 0; i < 20; i++) { for(int j = 0; j < 5; j++) printf("%d ", seat[i][j]); printf("\n"); }*/ }
相关文章推荐
- CCF认证 - 201609-2 - 火车购票 C语言代码实现(100分)
- CCF认证 - 201604-2 - 俄罗斯方块 C语言代码实现 (90分)
- CCF认证 - 201512-2 -消除类游戏 (C语言代码实现)(90分)
- CCF认证 - 201312-2 - ISBN号码 (C语言代码实现)(100分)
- CCF认证 - 201403-2 -窗口(C语言代码实现)(100分)
- CCF认证 - 201409-2 - 画图 (C语言代码实现)(100分)
- CCF认证 - 201503-1 - 图像旋转 - C语言代码实现(100分)
- CCF认证 - 201412-1 - 门禁系统 (C语言代码实现)(100分)
- CCF认证 - 201509-2 - 日期计算 C语言代码实现(100分)
- ccf 201609-2 火车购票 (只有90分)
- CCF认证 - 201412-2 - Z字形扫描 (C语言代码实现)(100分)
- CCF201609-2火车购票如何从90分到0分
- CCF认证 - 201409-1 - 相邻数对 (C语言代码实现)(100分)
- C语言实现md5函数代码
- C语言推箱子游戏实现代码
- Shell脚本实现C语言代码行数统计
- C语言实现修改文本文件中特定行的实现代码(百度一天没找到,bing搜索十分钟就找到了)
- PAT 1080MOOC期终成绩的代码实现及错误分析(C语言)
- c语言实现输入一组数自动从大到小排列的实例代码
- 用C语言实现一个简单的计算器代码