解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);
输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);
输出为1的树的数目;
注意事项:
数轴上的0点也有数;
参考代码:
#include<stdio.h> void chushihua(int *a,int n); void yichu(int *a,int x,int y); void output(int *a,int n); void function(); /*--------------------------------------------------*/ int main() { function(); return 0; } /*--------------------------------------------------*/ void function() { int n,h; int x,y; int a[10001]; while(scanf("%d%d",&n,&h)!=EOF) { chushihua(a,n); for(int i=0;i<h;i++) {scanf("%d%d",&x,&y);yichu(a,x,y);} output(a,n); } return ; } /*--------------------------------------------------*/ void chushihua(int *a,int n) { for(int i=0;i<=n;i++) a[i]=1; return ; } /*--------------------------------------------------*/ void yichu(int *a,int x,int y) { for(int i=x;i<=y;i++) a[i]=0; return ; } /*--------------------------------------------------*/ void output(int *a,int n) { int sum=0; for(int i=0;i<=n;i++) {if(a[i]==1)sum++;} printf("%d\n",sum); return ; }
0.0分
18 人评分
//gcc可以成功,提交时输出超限了,请教大佬帮忙分析一下原因。 #include <stdio.h> //初始化数组为1 void InitArray(int *a,int num) { for(int i=0; i<=num; i++) { a[i]=1; } } //将要移除的区域(x,y)置为0 void InitZero(int *a,int x,int y) { for(int i=x; i<=y; i++) { a[i]=0; } } //输出值为1的即为结果 void Result(int *a,int L) { int sum=0; for(int i=0; i<=L; i++) { if(a[i]==1) sum++; } printf("%d",sum); } int main() { int a[10001]; //题意L<=10000 int L,M,x,y; while(scanf("%d%d",&L,&M)) { InitArray(a,L); for(int i=0; i<M; i++) { scanf("%d%d",&x,&y); InitZero(a,x,y); } Result(a,L); } return 0; }
C二级辅导-求偶数和 (C语言代码)浏览:632 |
C语言训练-舍罕王的失算 (C语言代码)浏览:1054 |
C语言程序设计教程(第三版)课后习题11.12 (C语言代码)浏览:762 |
2^k进制数 (C++代码)使用递归方法浏览:736 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:591 |
妹子杀手的故事 (C语言代码)浏览:738 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:913 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:910 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
最小公倍数 (C语言代码)浏览:1109 |