洛谷刷题C语言:数字统计、你的飞碟在这儿、哥德巴赫猜想、数字翻转、低洼地

纪录洛谷刷题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

样例输入 #1

2 22

样例输出 #1

6

样例 #2

样例输入 #2

2 100

样例输出 #2

20

提示

1 ≤ L ≤ R ≤ 100000 1 ≤ L ≤R≤ 100000 1LR100000

代码如下

#include 
#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("%d\n",sum);
	return 0;
}

二、[USACO1.1]你的飞碟在这儿Your Ride Is Here

题目描述

众所周知,在每一个彗星后都有一只 UFO。这些 UFO 时常来收集地球上的忠诚支持者。不幸的是,他们的飞碟每次出行都只能带上一组支持者。因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走。他们为每个彗星起了一个名字,通过这些名字来决定这个小组是不是被带走的那个特定的小组(你认为是谁给这些彗星取的名字呢?)。关于如何搭配的细节会在下面告诉你;你的任务是写一个程序,通过小组名和彗星名来决定这个小组是否能被那颗彗星后面的 UFO 带走。

小组名和彗星名都以下列方式转换成一个数字:最终的数字就是名字中所有字母的积,其中 A \texttt A A 1 1 1KaTeX 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

样例输入 #1

COMETQ
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("%d\n",num1);
        }

    }
    m = num1 % 47;



    if(n == m)
    {
        printf("GO");

    }
    else
    {
        printf("STAY");
    }
    return 0;



}

三、哥德巴赫猜想

题目描述

输入一个偶数 N N N,验证 4 ∼ N 4\sim N 4N 所有偶数是否符合哥德巴赫猜想:任一大于 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} 2N2 行。对于第 i i i 行:

首先先输出正偶数 2 i + 2 2i+2 2i+2,然后输出等号,再输出加和为 2 i + 2 2i+2 2i+2 且第一个加数最小的两个质数,以加号隔开。

样例 #1

样例输入 #1

10

样例输出 #1

4=2+2
6=3+3
8=3+5
10=3+7

提示

数据保证,$ 4 \leq N\leq10000$。

代码如下

 
#include
#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;
 }
 

四、[NOIP2011 普及组] 数字反转

题目描述

给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。

输入格式

一个整数 N N N

输出格式

一个整数,表示反转后的新数。

样例 #1

样例输入 #1

123

样例输出 #1

321

样例 #2

样例输入 #2

-380

样例输出 #2

-83

提示

【数据范围】

$-1,000,000,000\leq N\leq 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("%d\n",m);
	} 
	return 0;
}

五、低洼地

题目描述

一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?

如图:地高变化为 0 1 0 2 1 2 0 0 2 0

洛谷刷题C语言:数字统计、你的飞碟在这儿、哥德巴赫猜想、数字翻转、低洼地_第1张图片

输入格式

两行,第一行n,表示有n个数。第2行连续n个数表示地平线高度变化的数据,保证首尾为0。(3<=n<=10000,0<=高度<=1000)

输出格式

一个数,可能积水低洼地的数目。

样例 #1

样例输入 #1

10
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("%d\n",ans);
	return 0;
}

你可能感兴趣的:(洛谷,C语言学习,c语言)