蓝桥杯第十一届校内模拟赛(1)

  • Post author:
  • Post category:其他


1.问题描述

两个二进制数11110011101和1111101001的和是多少?请用二进制表示,注意在提交的时候不要提交前导0。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个二进制数,在提交答案时只填写这个二进制数,填写多余的内容将无法得分。

答案:101110000110

2.问题描述

在计算机存储中,15.125GB是多少MB?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:15.125*1024=15488

3.问题描述

由1对括号,可以组成一种合法括号序列:()。

由2对括号,可以组成两种合法括号序列:()()、(())。

由4对括号组成的合法括号序列一共有多少种?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

…这道题暂时还不明白

4.问题描述

一棵包含有2019个结点的树,最多包含多少个叶结点?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:1010

5.问题描述

给定整数 m,在数列 a_1, a_2, …, a_n中,如果两个数的和为 m 的倍数,则称为一个倍数对。

给定一个数列,请问数列中总共有多少个倍数对。

输入格式

输入的第一行包含两个整数 n, m,分别表示数列中的元素个数和给定的整数 m。

第二行包含 n 个整数 a_1, a_2, …, a_n,相邻的整数间用空格分隔,表示给定的数列。

输出格式

输出一行包含一个整数,表示答案。

样例输入

6 3

6 1 2 5 6 2

样例输出

4

样例说明

倍数对包括:a_1 和 a_5, a_2 和 a_3, a_2 和 a_4, a_2 和 a_6。

评测用例规模与约定

对于 50% 的评测用例,1 <= n <= 100,1 <= m <= 1000,0 <= 数列中的数 <= 1000。

对于所有评测用例,1 <= n <= 1000,1 <= m <= 1000,0 <= 数列中的数 <= 10000

#include <stdio.h>
int main()
{
	int n,m;
	int count=0;
	scanf("%d %d",&n,&m);
	int a[n];
	int i=0;
	int j=0;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){ 
			if((a[i]+a[j])%m==0){
				count++;
			}
		}
	}	
	printf("%d",count);
	return 0;
}

6.问题描述

给定两个正整数 n 和 m,请问在整数 1 至 n 中,各位数字的平方和为 m 的总共有多少个?

例如,当 n=100,m=5 时,只有 12 和 21 各位数字的平方之和为 5,所以答案为 2。

输入格式

输入的第一行包含两个整数 n 和 m,用一个空格分隔。

输出格式

输出一行包含一个整数,表示答案。

样例输入

100 5

样例输出

2

评测用例规模与约定

对于 40% 的评测用例,1 <= n <= 1000,1 <= m <= 1000。

对于所有评测用例,1 <= n <= 1000000,1 <= m <= 1000。

#include <stdio.h>
int main(){
	int n,m;
	int i=1;
	int r=0;
	int count=0;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++){
		int s=0;  //s需要归零,不然会累积 ,结果错误 
		int j=i;
		while(j>0){
			r=j%10;
			s=s+r*r;
			j=j/10;
			//printf("%d \n",s);
		}
		if(s==m){
			count++;
			printf("%d\n",i);
		}		
	}
	printf("%d\n",count);
	return 0;
}

7.问题描述

小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。

请问在整数 1 至 n 中,洁净数有多少个?

输入格式

输入的第一行包含一个整数 n。

输出格式

输出一行包含一个整数,表示答案。

样例输入

30

样例输出

18

评测用例规模与约定

对于 40% 的评测用例,1 <= n <= 10000。

对于 80% 的评测用例,1 <= n <= 100000。

对于所有评测用例,1 <= n <= 1000000。

#include <stdio.h>
int main(){
	int n;
	int i=1;
	int count=0;
	int r=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		int j=i;
		while(j>0){
			r=j%10;
			if(r==2)
				break;  //结束本次循环 
			j=j/10;	
		}
		if(r!=2){
			count++;
			printf("%d\n",i);
		}
			
	}
	printf("%d",count);
	return 0;
}

8.问题描述

小明开了一家花店,这天,有个客户定了非常多的花,按客户的需要,这些花要排成 n 行 m 列。

小明要将这些花运送到客户那,然而由于花太多,需要分两辆车才能装下。

小明怕自己弄错花的顺序,因此在分车的时候,他准备将前面一些列(注意不是行)的花放在第一辆车上,将其实的花放在第二辆车上。

已知每盆花的重量,要使第一辆车和第二辆车尽可能总重量一致,请帮助小明分装这些花,请告诉小明两辆车的重量最小差多少。

输入格式

输入的第一行包含两个整数 n, m,分别表示行数和列数。

接下来 n 行,每行 m 个正整数,分别表示每盆花的重量。

输出格式

输出一个整数,表示总重量最接近时两车的重量之差(的绝对值)。

样例输入

3 4

1 2 3 9

5 6 7 8

2 3 4 9

样例输出

7

样例说明

将前 3 列放一辆车,后 1 列放一辆车,第一辆比第二辆重 7 。

评测用例规模与约定

对于 30% 的评测用例,2 <= n, m <= 20。

对于 70% 的评测用例,2 <= n, m <= 100。

对于所有评测用例,2 <= n, m <=1000,每盆花的重量不超过 1000。

思路:我的想法是从第一列开始加,加到超过总重量的一半,停止,判断是否再加当前这一列。

代码比较简单,主要是顺着思路写下去就行


如果有更简单的方法,可以评论分享哈

#include <stdio.h>
#include <stdlib.h>

int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	int i,j=0;
	int a[n][m];
	int b[m];
	
	int s=0;
	int h=0;
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	//将每一列的和赋给数组b[m]
	for(i=0;i<m;i++){
		b[i]=0;  
		for(j=0;j<n;j++){	
			b[i]+=a[j][i]; 
		}
	}
	//求出所有花盆重量和
	for(i=0;i<m;i++){
		printf("%d\n",b[i]);
		s+=b[i];
	}
	//printf("%d",s);
	for(i=0;i<m;i++){  //从第一列开始遍历数组b
		h+=b[i];    //将每一列相加
		if(h>(s/2)){  //看是否达到总和的一半
			printf("%d\n",h);
			int h1 = h-b[i];
			if(abs(s/2-h1)>(h-s/2)){
				printf("%d\n",i+1);
				printf("%d\n",h1);
				printf("%d\n",abs(s-h-h));
				break;
			}
			else
				printf("%d",i);	
				printf("%d\n",abs(s-h1-h1));break;
		}
		else if(h==s/2){
			printf("%d",i+1);
			printf("%d",0);break;
		}
		else{
		}
	}
	return 0;
} 



版权声明:本文为weixin_43900597原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。