内容正文:
一 . 比特位计数:从键盘输入一个非负整数n(n<100),请计算1到n之前的每个数字所对应的二进制表示中1的个数,存入到数组中并输出。
考点: 多重循环嵌套,十进制转二进制的方法及数组相关操作方法。
难度: 中等
示例:
输入 n=5
输出 1,1,2,1,2
解释:
1 => 1
2 => 10
3 => 11
4 => 100
5 => 101
#include<stdlib.h>
#include<stdio.h>
int main(){
int n,i,j,temp,count;
int a[100];
j=0;
/*********start********/
/*********end********/
printf("1~n之前各数字二进制表示所对应的1的个数为:
");
for(i=0;i<j;i++)
{
printf("%d ",a[i]);
}
}
答案:
scanf("%d",&n);
for(i=1;i<=n;i++){
count=0;
temp=i;
while(temp>0){
if(temp%2==1){
count++;
}
temp/=2;
}
a[j++]=count;
}
样张:
二 . 寻找元素的中心下标: 数组中心下标是数组中一个元素的下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
请输入数组元素,并输出该数组的中心下标,中心下标通过指针P返回。
示例1:
输入: num = [1,7,3,6,5,6]
输出: 3
解释:
第一个数字6左侧的元素和为:num[0]+num[1]+num[2]=1+7+3=11
右侧的元素和为: num[4]+num[5]=5+6=11
左侧元素和=右侧元素和,故中心元素为6,中心元素对对应的下标为3,故中心下标为3
示例2:
输入: num = [2,1,-1]
输出: 0
解释: 下标为0的数字左侧不存在元素,故左侧数之和为0,右侧数和为0。
所以中心下标为0
考点: 数组及函数和指针的综合运用。
难度: 难
#include<stdlib.h>
#include<stdio.h>
#define N 6
void centerIndex(int num[], int *p){
int i,j,k,sum1,sum2;
/**********start*********/
/********** end *********/
}
int main(){
int a[N]={1,7,3,6,5,6};
int n;
centerIndex(a,&n);
if(n==-1){
printf("该数组没有中心下标");
}else{
printf("该数组的中心下标为:
%d",n);
}
}
答案:
for(i=0;i<N;i++){
sum1=0,sum2=0;
for(j=0;j<i;j++){
sum1+=num[j];
}
for(k=j+1;k<N;k++){
sum2+=num[k];
}
if(sum1==sum2){
*p=i;
break;
}
}
if(i==N) *p=-1;
示例1样张:
示例2样张:
学科网(北京)股份有限公司
$$