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