解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);
输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);
输出为1的树的数目;
注意事项:
数轴上的0点也有数;
参考代码:
//C++ #include <iostream> using namespace std; int main() { int L,M,x,y,a[10001]; cin>>L>>M; for(int i=0;i<=L; i++) //先将数组全赋值为1 a[i]=1; for(int i=0; i<M; i++) { cin>>x>>y; //[x,y]为区域区间 for(int j=x; j<=y; j++) //将区域区间内的值赋为0 a[j]=0; } int sum=0; for(int i=0; i<=L; i++) { if(a[i]==1) //如果数组元素值是1 则计数加1 sum++; } cout<<sum; return 0; }
//C #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; }
0.0分
27 人评分
C语言考试练习题_保留字母 (C语言代码)浏览:638 |
2005年春浙江省计算机等级考试二级C 编程题(3),复杂度最低的方法没有之一!!!!!浏览:856 |
程序员的表白 (C语言代码)浏览:1576 |
C语言考试练习题_排列 (C语言代码)浏览:1373 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:645 |
1113题解浏览:823 |
有关字符,字符串的输入输出函数说明浏览:498 |
杨辉三角 (C语言代码)浏览:505 |