原题链接:蓝桥杯历届试题-国王的烦恼
//大概意思就是:构成一个较大的二位数组(!!!!这个好像不可以直接定义,需要其他办法),然后行和列就是表示两岸,数值表示之前的桥的耐久度, //先遍历行,如果一整行的值都是0,说明这一个岸被孤立了,所以就满足题意。跳出循环,输出day。 #include<stdio.h> #include<malloc.h> int shuzu[10001][10001] = { 0 };//这里有点问题,数组定义过大。应该是唯一不对的点,但是在我的编译器VS2019可以用 //数组用来存相连的情况,数组中的值存天数。 int main() { int n = 0, m = 0, a = 0, b = 0, t = 0; int count = 0, day = 0; if (scanf("%d %d", &n, &m))//输入岸和桥的值 { } for (int i = 1; i <= m; i++) { if (scanf("%d %d %d", &a, &b, &t))//输入连接情况 { } shuzu[a][b]= t;//把使用天数写到数组中 shuzu[b][a] = t; } int flag = 0;//定义一个标志,用于结束循环 while (flag==0) { for (int j = 1;j <= m;j++)//先循环行 { flag = 0;//先让标志归零 for (int k = 1; k <= m; k++)//循环列 { if (shuzu[j][k]== 0)//意思就是两岸不相连 { count++; } } if (count == m)//说明改行所有数均为0,即这个岸不和其他岸相连,符合题意,跳出两层循环,输出day就可以了。 { flag = 1; break; } else { count = 0;//继续循环下一行,先把count清零。 } } if (count==m)//这里防止day++多执行; { break;//跳出大循环 } else { day++;//如果不满足上述条件,就说明没有岸被孤立,day++ } for (int s = 1; s <= m; s++)//判断数组中的数值,如果有大于0的,就说明还没有坏掉,让他-1,就是耐久度-1; { for (int t = 1;t <= m;t++) { if (shuzu[s][t] > 0) { shuzu[s][t]--; } } } } printf("%d", day);//输出day!就是结果了。 return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复