CSP 201512 | 201604考试题目
Posted coffeesoul
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP 201512 | 201604考试题目相关的知识,希望对你有一定的参考价值。
2015—12第一题
问题描述
给定一个十进制整数n,输出n的各位数字之和。
输入格式
输入一个整数n。
输出格式
输出一个整数,表示答案。
样例输入
20151220
样例输出
13
样例说明
20151220的各位数字之和为2+0+1+5+1+2+2+0=13。
评测用例规模与约定
所有评测用例满足:0 ≤ n ≤ 1000000000。
基本思路:
通过对数n依次求模取得个位数,用sum相加,相加之后再依次除以10,去掉已经相加最后一位。
代码实现
#include "stdio.h" int main() { int n, sum; scanf("%d",&n); sum=0; while(n)///表示n不等于0 { sum+=n%10;///n%10就是个位数 n=n/10;///除10就是去掉最后一位 } printf("%d",sum); return 0; }
2015—12第二题
问题描述
消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
请注意:一个棋子可能在某一行和某一列同时被消除。
输入格式
输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。
输出格式
输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
样例输入
4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4
样例输出
2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4
样例说明
棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
样例输入
4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3
样例输出
2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0
样例说明
棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
评测用例规模与约定
所有的评测用例满足:1 ≤ n, m ≤ 30
代码实现
#include <stdio.h> int main() { int NUM1; int NUM2; scanf("%d",&NUM1); scanf("%d",&NUM2); int a[NUM1][NUM2]; int b[NUM1][NUM2]; int i; int j; for(i=0; i<NUM1; i++) { for(j=0; j<NUM2; j++) { scanf("%d",&a[i][j]); } } for(i=0; i<NUM1; i++) { for(j=0; j<NUM2; j++) { b[i][j]=1; } } for(i=0; i<NUM1; i++) { for(j=0; j<NUM2; j++) { if(((j+2)<NUM2)&&(a[i][j]==a[i][j+1])&&(a[i][j]==a[i][j+2])) { b[i][j]=0; b[i][j+1]=0; b[i][j+2]=0; } if(((i+2)<NUM1)&&(a[i][j]==a[i+1][j])&&(a[i][j]==a[i+2][j])) { b[i][j]=0; b[i+1][j]=0; b[i+2][j]=0; } } } for(i=0; i<NUM1; i++) { for(j=0; j<NUM2; j++) { if(b[i][j]==0) { a[i][j]=0; } } } printf(" "); for(i=0; i<NUM1; i++) { for(j=0; j<NUM2; j++) { printf("%d ",a[i][j]); } printf(" "); } return 0; }
2016—04第一题
问题描述
给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。其他的天都不是折点。如下图中,第3天和第6天是折点。
给定n个整数a1, a2, …, an表示销售量,请计算出这些天总共有多少个折点。
为了减少歧义,我们给定的数据保证:在这n天中相邻两天的销售量总是不同的,即ai-1≠ai。注意,如果两天不相邻,销售量可能相同。
输入格式
输入的第一行包含一个整数n。
第二行包含n个整数,用空格分隔,分别表示a1, a2, …, an。
输出格式
输出一个整数,表示折点出现的数量。
样例输入
7
5 4 1 2 3 6 4
样例输出
2
评测用例规模与约定
所有评测用例满足:1 ≤ n ≤ 1000,每天的销售量是不超过10000的非负整数。
代码实现
#include <stdio.h> #define N 1000 int a[N]; int main() { int n, i, count; // 读入数据 scanf("%d", &n); for(i=0; i<n; i++) scanf("%d", &a[i]); // 计算折点 count = 0; for(i=1; i<n-1; i++) if((a[i-1] < a[i] && a[i] > a[i+1]) || (a[i-1] > a[i] && a[i] < a[i+1])) count++; // 输出结果 printf("%d ", count); return 0; }
以上是关于CSP 201512 | 201604考试题目的主要内容,如果未能解决你的问题,请参考以下文章