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

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

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

你可能感兴趣的:(蓝桥杯)