纪录洛谷刷题QAQ
一、[NOIP2010 普及组] 数字统计 题目描述
请统计某个给定范围 [ L , R ] [L, R] [L,R]的所有整数中,数字 2 2 2 出现的次数。
比如给定范围 [ 2 , 22 ] [2, 22] [2,22],数字$ 2$ 在数 $2 $中出现了 1 1 1 次,在数$ 12$ 中出现 1 1 1 次,在数 20 20 20 中出现 $1 $次,在数 21 中出现 1 1 1 次,在数 22 22 22 中出现 $2 次,所以数字 次,所以数字 次,所以数字 2$ 在该范围内一共出现了 6 6 6次。
输入格式2 2 2个正整数 L L L 和 R R R,之间用一个空格隔开。
输出格式数字 $2 $出现的次数。
样例 #1 样例输入 #12 22样例输出 #1
6样例 #2 样例输入 #2
2 100样例输出 #2
20提示
1 ≤ L ≤ R ≤ 100000 1 ≤ L ≤R≤ 100000 1≤L≤R≤100000。
代码如下:#include二、[USACO1.1]你的飞碟在这儿Your Ride Is Here 题目描述#include #include int main() { int n, m; scanf("%d%d",&n,&m); int i, num, sum = 0; for(i = n;i <= m;i++){ int point = i; while(point != 0){ num = point%10; if(num == 2){ sum++; } point = point/10;; } } printf("%dn",sum); return 0; }
众所周知,在每一个彗星后都有一只 UFO。这些 UFO 时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的 UFO 带走。
小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 A texttt A A 是 1 1 1,KaTeX parse error: Undefined control sequence: textttZ at position 1: ̲t̲e̲x̲t̲t̲t̲Z̲ 是 26 26 26。例如, USACO texttt{USACO} USACO 小组就是 21 × 19 × 1 × 3 × 15 = 17955 21 times 19 times 1 times 3 times 15=17955 21×19×1×3×15=17955。如果小组的数字 m o d 47 bmod 47 mod47 等于彗星的数字 m o d 47 bmod 47 mod47,你就得告诉这个小组需要准备好被带走!(记住“ a m o d b a bmod b amodb”是 a a a 除以 b b b 的余数,例如 34 m o d 10 34 bmod 10 34mod10 等于 4 4 4)
写出一个程序,读入彗星名和小组名并算出用上面的方案能否将两个名字搭配起来,如果能搭配,就输出 GO,否则输出 STAY。小组名和彗星名均是没有空格或标点的一串大写字母(不超过 6 6 6 个字母)。
输入格式第1行:一个长度为 1 1 1 到 6 6 6 的大写字母串,表示彗星的名字。
第2行:一个长度为 1 1 1 到 6 6 6 的大写字母串,表示队伍的名字。
输出格式 样例 #1 样例输入 #1COMETQ HVNGAT样例输出 #1
GO样例 #2 样例输入 #2
ABSTAR USACO样例输出 #2
STAY提示
题目翻译来自 NOCOW。
USACO Training Section 1.1
代码如下:#include三、哥德巴赫猜想 题目描述#include #include #include int main() { char name1[6];//小组名 char name2[6];//彗星名 char jm[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int num = 1;//彗星总数 int num1 = 1;//小组的总数 int i,j; int n,m; //puts(jm); scanf("%s",name2); fflush(stdin); scanf("%s",name1); fflush(stdin); //遍历比较计算彗星的值 for(i = 0;i < strlen(name2);i ++) { for(j = 0;j < 26;j ++) { if(name2[i] == jm[j]) { num = num * (j + 1); } } } n = num % 47; //遍历比较计算小组的值 for(i = 0;i < strlen(name1);i ++) { for(j = 0;j < 26;j ++) { if(name1[i] == jm[j]) { num1 = num1 * (j + 1); } //printf("%dn",num1); } } m = num1 % 47; if(n == m) { printf("GO"); } else { printf("STAY"); } return 0; }
输入一个偶数 N N N,验证 4 ∼ N 4sim N 4∼N 所有偶数是否符合哥德巴赫猜想:任一大于 2 2 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10 10 10, 10 = 3 + 7 = 5 + 5 10=3+7=5+5 10=3+7=5+5,则 10 = 5 + 5 10=5+5 10=5+5 是错误答案。
输入格式第一行输入一个正偶数 N N N
输出格式输出 N − 2 2 dfrac{N-2}{2} 2N−2 行。对于第 i i i 行:
首先先输出正偶数 2 i + 2 2i+2 2i+2,然后输出等号,再输出加和为 2 i + 2 2i+2 2i+2 且第一个加数最小的两个质数,以加号隔开。
样例 #1 样例输入 #110样例输出 #1
4=2+2 6=3+3 8=3+5 10=3+7提示
数据保证,$ 4 leq Nleq10000$。
代码如下:#include四、[NOIP2011 普及组] 数字反转 题目描述#include //验证是否是质数的函数 int ZHISHU(int n) { int a = 0; for(int i = 2;i <= n-1;i++){ if(n % i == 0){ a++; } } if(a == 0) { return 1; }else{ return 0; } } int main() { int N;//N是一个偶数 scanf("%d",&N); for(int i = 4;i <= N;i=i+2){ // printf("%d ",i); printf("%d",i); printf("="); for(int j = 2;j < i;j++) { int left = i-j; if(ZHISHU(left)==1&&ZHISHU(j)==1){ printf("%d",j); printf("+"); printf("%d",left); break; } } printf("n"); } return 0; }
给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式一个整数 N N N。
输出格式一个整数,表示反转后的新数。
样例 #1 样例输入 #1123样例输出 #1
321样例 #2 样例输入 #2
-380样例输出 #2
-83提示
【数据范围】
$-1,000,000,000leq Nleq 1,000,000,000 $。
noip2011 普及组第一题
代码如下:#include五、低洼地 题目描述#include int main(int argc, char *argv[]) { int n; while(scanf("%d",&n)!=EOF){ int m = 0, a; while(1){ a = n%10; m = m*10 + a; n = n/10; if( n == 0){ break; } } printf("%dn",m); } return 0; }
一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?
如图:地高变化为 0 1 0 2 1 2 0 0 2 0
输入格式两行,第一行n,表示有n个数。第2行连续n个数表示地平线高度变化的数据,保证首尾为0。(3<=n<=10000,0<=高度<=1000)
输出格式一个数,可能积水低洼地的数目。
样例 #1 样例输入 #110 0 1 0 2 1 2 0 0 2 0样例输出 #1
3代码如下:
#include#include int main(){ int n;//表示有n个数 scanf("%d",&n); int num[n]; for(int i = 0;i < n;i++) { scanf("%d",&num[i]); } int start,tmp; int ans = 0 ; for(int i = 1;i < n;i++) { if(num[i-1]>num[i]) { start = 1; tmp = num[i]; } if(tmp < num[i]&& start == 1){ start = 0; tmp = 0; ans++; } } printf("%dn",ans); return 0; }



