NOIP(五)

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 /**
 5     一维数组
 6     int a[10];
 7     1.类型int[] 
 8     2.长度10
 9     3.下标 
10 */
11 int main(){
12     /*
13         样例:
14         输入:6 
15         输入:1 3 2 3 1 2
16         输入:1
17         输出:2
18     */ 
19     int n,b,c = 0;
20     cin >> n;
21     int a[n];
22     memset(a,0,sizeof(a));
23     for(int i = 0;i < n;i++){
24         cin >> a[i];
25     }
26     cin >> b;
27     for(int i = 0;i < n;i++){
28         if(a[i] == b){
29             c++;
30         }
31     }
32     cout << c << endl;
33     /*
34         解题思路:
35         1、输入
36         2、算法
37         3、输出 
38     */
39     return 0;
40 }
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <algorithm>
 6 using namespace std;
 7 /**
 8     数组逆序输出 
 9     输入:5
10     输入:8 6 5 4 1
11     输出:1 4 5 6 8
12     swap(当前这一项,后面一项)
13 */
14 int main(){
15     int n;
16     int a[n];
17     memset(a,0,sizeof(a));
18     cin >> n;
19     //输入 
20     for(int i = 0;i < n;i++){
21         cin >> a[i];
22     }
23     //算法 ,j <= n/2指的是总共需要交换n/2次能完成。 
24     for(int j = 0;j <= n/2;j++){
25         //a[n-i-1]指的是a[j]所对称的那一项 
26         swap(a[j],a[n - j - 1]);
27     }
28     //输出 
29     for(int k = 0;k < n;k++){
30         cout << a[k] << " ";
31     }
32     /*
33         a[1]   a[n - i + 1]
34         a[0]  a[n - i - 1]
35         a[1]  a[5 - 1 - 1]
36         最后一项:a[n - j + 1] 
37         
38         a[0]  , a[5 - 0-1]
39         a[1]  a[5 - 1]
40         最后一项 a[n - j - 1] 
41     */ 
42     
43 //    8         6         5         4         1
44 //    1         4         5         6         8
45 //    a[n-n] a[n - (n - 1)]            a[n - 1]
46 //    
47 //        n = 7
48 //    3 = n/2
49 //    1 2 3 4 5 6   n = 6
50 //    3 = n/2
51     
52 
53     return 0;
54 }
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <algorithm>
 6 using namespace std;
 7 /**
 8     校门外的树 
 9     某校门外长度为L的马路上有一排树,每两棵相邻树之间的间隔都是
10     1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,
11     另外一端在L的位置;数轴上的每个整数点,即0,1,2,3,....,L,都有
12     一棵树。
13     由于马路上有一些区域要用来建造地铁。这些区域用它们在数轴上的起始点
14     和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间
15     可能有重合的部分。现在要把这些区域中的树(包含区域端点处的两棵树)
16     移走。你的任务是计算将这些树都移走后,马路上还有多少棵树?
17     输入:一行两个整数L(1 <= L <= 10000)和M(1 <=  M <= 100) ,
18     L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的
19     M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和
20     终止点的坐标。
21     对于20%的数据,区域之间没有重合的部分;对于其他数据,区域之间有重合的部分。
22     输出:
23         一行。这一行只包含一个整数,表示马路上剩余的树。
24     测试样例#1:
25     样例输入: 
26         500 3
27         150 300
28         100 200
29         470 471
30     样例输出:
31         198 
32 */
33 int main(){
34     int a[10001];
35     int l,m,x,y,s = 0;
36     //输入
37     scanf("%d %d",&l,&m);
38     //初始状态将a数组中树的标记位变成1
39     for(int i = 0;i <= l;i++){
40         a[i] = 1;//将标志位的值变成1 
41     }
42     //算法
43     for(int i = 1;i <= m;i++){
44         scanf("%d %d",&x,&y);//输入建造地铁的区间范围 
45         //算出要移走树并且将标志位变成0
46         for(int j = x;j <= y;j++){
47             a[j] = 0;//被挖走的树标志位0 
48         } 
49     }
50     //如果树没有被挖走,那么就统计留下的树有多少棵
51     for(int i = 0;i <= l;i++){
52         if(a[i] == 1){
53             s++;
54         } 
55     } 
56     cout << s << endl;
57     return 0;
58 }
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <algorithm>
 6 using namespace std;
 7 /**
 8     在一个序列(规定下标从1开始)中查找一个给定的值,输出第一次出现的位置。
 9     输入 :
10         第一行包含一个正整数n(1 <=  n <= 10000),表示序列中元素的个数
11         第二行包含n个整数,依次给出序列的每个元素,相邻两个整数之间用单个
12         空格隔开。元素的绝对值不能超过10000.
13         第三行包含一个整数x,为需要查找的特定值x。x的绝对值不超过10000.
14     输出:
15         若序列中存在x,输出x第一次出现的下标;否则输出-1。
16     样例输入:
17         5
18         2 3 6 7 3
19         3
20     样例输出:
21         2 
22 */
23 int main(){
24     //有n棵树,i表示树的头上的标号(下标),
25     //k是否存在这样的一棵树,-1不存在。 
26     //x表示比较的条件 
27     int n,i = 0,k = -1,x;
28     //一、输入 
29     cin >> n;
30     int a[n];//数组a表示每棵树的高度 
31     //把每一棵树的高度输入到数组a中
32     for(int j = 1;j <= n;++j){
33         cin >> a[j];
34     }
35     cin >> x;
36     //算法
37     //循环必须要在树的棵树之内并且满足条件的这棵树还没出现 
38     while(i <= n && k < 0){
39         i++;
40         if(a[i] == x){//其中只要有一棵树的高度等于比较值x
41             //不再集训循环
42             k = i; 
43         } 
44     }
45     //输出 
46     cout << i << endl;
47     return 0;
48 }
 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 //排除最高数以后的和 
 8 int main(){
 9     int n;
10     cin >> n;
11     int a[n];
12     for(int i = 0;i < n;i++){
13         cin >> a[i];
14     }
15     sort(a + 0,a + n);
16     //打桩测试 
17     for(int i = 0;i < n;i++){
18         cout << a[i] << " ";
19         if(a[i] != a[n - 1]){
20             sum += a[i];
21         }
22     }
23     cout << sum;
24     return 0;
25 }
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <algorithm>
 6 using namespace std;
 7 /**
 8 整数序列去重 
 9 */
10 int main(){
11     int n;
12     cin >> n;
13     int a[n];
14     bool s[n];
15     memset(a,0,sizeof(a)); 
16     memset(s,true,sizeof(s)); 
17     for(int i = 0;i < n;i++){
18         cin >> a[i];
19     }
20     //去重
21     for(int i = 1 ;i <= n;i++){
22         if(s[i]){
23             for(int j = i + 1;j <= n;j++){
24                 if(a[i] == a[j]){
25                     s[j] = false;
26                 }
27             }
28         }
29     } 
30     //输出
31     for(int i = 0;i < n;i++){
32         if(s[i])
33             cout << a[i] << " ";
34     } 
35     return 0;
36 }

猜你喜欢

转载自www.cnblogs.com/huihuilaoshi/p/11222082.html