学习笔记7/23(86集作业)

JZ15 二进制中1的个数

JZ15 二进制中1的个数

利用 n = n & (n - 1)消1 然后count++或者 n&1==1(说明此时二进制最后一位为1) 然后n=n>>1;

#include<stdio.h>


// int  NumberOf1(int n){
// 	int flag=32;//32位
// 	int count=0;
// 	while(flag){
// 		if(n&1==1){
// 			count++;
// 		}
// 		n=n>>1;
// 		flag--;
// 	} 
// 	return count;
// }
int NumberOf1(int n) {
    int count = 0;
    while (n) {
        n = n & (n - 1);
        count++;
    }
    return count;
}

int main(){
	int ww=0;
	scanf("%d",&ww);
	int count= NumberOf1(ww);
	printf("%d\n",count);
	return 0;
} 
OR76 两个整数二进制位不同个数

OR76 两个整数二进制位不同个数

#include<stdio.h>

//直接判断 
int diff(int ww,int cc){
	int count=0;
	int i=0;
	for(i=0;i<32;i++){
		if(((ww>>i)&1)!=((cc>>i)&1)){
			count++;
		}
	} 
	return count;
}
异或^ 相同为0 为异为1 
//int diff(int ww,int cc){
//	int count=0;
//	int n=ww^cc;
//	//求有多少个1 
//	while(n){
//		n=n&(n-1);
//		count++; 
//	} 
//	return count;
//}
//求两个数二进制不同的位数有几个 
int main(){
	int ww=0;
	int cc=0;
	scanf("%d %d",&ww,&cc);
	int count= diff(ww,cc);
	printf("%d\n",count);
	return 0;
} 
易错点

全局变量  静态变量都在放在静态区 不初始化 默认为0 
局部变量  是放在栈区 不初始化 默认值是随机值  

 sizeof这个操作符计算返回值结果是size_t类型的 是无符号整形
    //i为-1 比较的过程中会变成一个非常大的正数 
    //最终i>sizeof(i) 4 

#include<stdio.h>
//全局变量  静态变量都在放在静态区 不初始化 默认为0 
//局部变量是放在栈区 不初始化 默认值是随机值
    
int i;//全局变量 默认为0

int main(){
	i--; //-1
	//sizeof这个操作符计算返回值结果是size_t类型的 是无符号整形
	//i为-1 比较的过程中会变成一个非常大的正数 
	//最终i>sizeof(i) 4 
	if(i>sizeof(i)){
		printf(">\n");
	} else{
		printf("<\n");
	}
	return 0;
} 
X形图案(找规律)

X形图案

对角线

*   *
 * * 
  *  
 * * 
*   *  i=j时 或者i+j=长度时打印 

if((i==j)||(i+j==n-1))

#include<stdio.h>
int main(){
	int n=0;
	//多组输入 
	while(scanf("%d",&n)==1){
	int i=0;
	for(i=0;i<n;i++){
		int j=0;
		for(j=0;j<n;j++){
			
			if(j==i||j==n-i-1){
				printf("*");
			} else
			printf(" "); 
		}
		printf("\n");
	} 
	}

		 
	return 0;
} 
BC74 获得月份天数

BC74 获得月份天数

此题代码很简单 需注意的是while判断中

scanf("%d %d", &year, &month) != EOF或者

scanf("%d %d",&year,&month)==2

scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型。

#include<stdio.h>
int main(){
	int  year=0;
	int  month=0;
	while(scanf("%d %d",&year,&month)!=EOF){
	if(month==1||
	month==3||
	month==5||
	month==7||
	month==8||
	month==10||
	month==12){
		printf("%d\n",31); 
	}else if(month==2){
		if((year%4==0&&year%100!=0)||year%400==0){
			printf("%d\n",29); 
		}else{
			printf("%d\n",28);
		}
	}else{
		printf("%d\n",30); 

	}
	}
	return 0;
}
BC71 三角形判断

BC71 三角形判断

先判断大小

#include<stdio.h>

int main(){
	int a=0;
	int b=0;
	int c=0;
	while(scanf("%d %d %d",&a,&b,&c)==3){
		int arr[3]={a,b,c};
		int i=0;
		for(i=0;i<3-1;i++){
			int j=0;
			for(j=0;j<3-1-i;j++){
				if(arr[j]<arr[j+1]){
					int temp=0;
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp; 
				}
			}
		}
		if(arr[0]<arr[1]+arr[2]){
			if(arr[0]==arr[2])
			printf("Equilateral triangle!\n");
			else if(arr[0]==arr[1]||arr[1]==arr[2])
			printf("Isosceles triangle!\n");
			else
			printf("Ordinary triangle!\n");
		}else{
			printf("Not a triangle!\n");
		}
	}
	return 0;
} 

直接if判断 

#include<stdio.h>
 
int main(){
	int a=0;
	int b=0;
	int c=0;
	while(scanf("%d %d %d",&a,&b,&c)==3){
		//任意两边大于第三边 
		if(a+b>c&&a+c>b&&b+c>a){
			if(a==b&&b==c){
				printf("Equilateral triangle!\n");
			} else if(a==b||b==c||a==c){
				printf("Isosceles triangle!\n");
			}else{
				printf("Ordinary triangle!\n");	
			}
		} else{
			printf("Not a triangle!\n");
		}
	}
	return 0;
} 

  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值