解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即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语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:621 |
矩形面积交 (C语言代码)浏览:1514 |
求组合数 (C语言代码)浏览:1159 |
完数 (C语言代码)浏览:690 |
矩阵加法 (C语言代码)浏览:1722 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:656 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:512 |
简单的事情 (C语言代码)浏览:638 |
JAM计数法 (C语言代码)浏览:671 |