算法笔记day04

幸运数字“7”

解题思路:

  1. 先判断是否是“7”的倍数
  2. 不是的话,在看数字中是否含有“7”

在这里插入图片描述

#include<stdio.h>
int main(){
	int n,flag;
	scanf("%d",&n);
	for(int k=1;k<=n;k++){
		flag=0;
		if(k%7==0)printf("%d ",k);
		else {
			int m=k;
			while(m>0){
				if(m%10==7){
					flag=1;
					break;
				}
				m=m/10;
			}
		}
		if(flag==1) printf("%d ",k);
	}
	return 0;
}

方差

在这里插入图片描述

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	double x[n],s=0,sum=0;
	int i;
	for(i=0;i<n;i++){
		scanf("%lf",&x[i]);
		sum+=x[i];
	}
	double a=sum/n;
	for(i=0;i<n;i++){
		s+=(x[i]-a)*(x[i]-a);
	}
	printf("%.6lf\n",s);
	return 0;
}

A+B

在这里插入图片描述

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	while(n-->0){
		int a,b;
		scanf("%d %d",&a,&b);
		if(a>100) a=a%100;
		if(b>100) b=b%100;
		int c=a+b;
		if(c>100) c=c%100;
		printf("%d\n",c);
	}
	return 0;
}

获取指定二进制位

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int gitbit(int n,int k){
	int num;
	int h=n;
	while(n>0&&k>0){
		num=n%10;
		n=n/10;
		k--;
	}
	if(k==0) return num;
	else{
		while(h>10) h=h/10;
		return h;
	}
}
int main(){
	int n,k;
	scanf("%d %d",&n,&k);
	printf("%d\n",gitbit(n,k));
	return 0;
}

发工资的日子

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main(){
	int n;
	scanf("%d",&n);
	int a[n],i,sum=0;
	int num=0;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
		sum=a[i];
	if(sum>=100) num+=sum/100;
	sum=sum%100;
	if(sum>=50) num+=sum/50;
	sum=sum%50;
	if(sum>=10) num+=sum/10;
	sum=sum%10;
	if(sum>=2) num+=sum/2;
	sum=sum%2;
	if(sum==1) num+=sum;
   }
	printf("%d\n",num);
	return 0;
}

最小整数

在这里插入图片描述#include<stdio.h> #include<math.h> int fceil(double x){ if(x>0){ int a=(int)x+1; } else if(x<0){ int a=(int)x; } else return 0; } int main(){ double x; scanf("%lf",&x); printf("%d\n",fceil(x)); return 0; }

循环移位

t=value>>n|value<<32-n; 是一个位运算的表达式,用于将一个32位整数value的高n位和低32-n位进行交换。

具体解释如下:
value>>n 表示将value向右移动n位,即将value的低32-n位移到高n位。
value<<32-n 表示将value向左移动32-n位,即将value的高n位移到低32-n位。
| 表示按位或操作,将两个操作数的对应位进行或运算。
综合起来,t=value>>n|value<<32-n; 的作用是将value的高n位和低32-n位进行交换,并将结果保存在变量t中。
在这里插入图片描述

#include<stdio.h>
#include<math.h>
int move(int value,int n){
	int t;
	if(n>0) t=value>>n|value<<32-n;
	else {
		n=-n;
		t=value<<n|value>>32-n;
	}
	return t;
}
int main(){
	int value,n;
	scanf("%d %d",&value,&n);
	printf("%d\n",move(value,n));
	return 0;
}

A+B时间加法

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main(){
	int ah,am,as,bh,bm,bs;
	scanf("%d %d %d %d %d %d",&ah,&am,&as,&bh,&bm,&bs);
	int s,m,h;
	s=as+bs;
	m=am+bm+s/60;
	h=ah+bh+m/60;
	s=s%60;
	m=m%60;
	if(s>=24) s=s%24;
	printf("%d %d %d\n",h,m,s);
	return 0;
}

逆序整数

在这里插入图片描述

#include<stdio.h>
#include<math.h>
void f(long int n){
	int m;
	m=n%10;
	printf("%d",m);
	n=n/10;
	if(n!=0) f(n);
}
int main(){
	long int n;
	scanf("%d",&n);
	f(n);
	return 0;
}

高低交换

在这里插入图片描述

#include<stdio.h>
#include<math.h>
inline int xchg(unsigned char n){
	n=n>>4|n<<4;
	return n;
}
int main(){
	unsigned char n;
 	scanf("%d",&n);
	printf("%d\n",xchg(n));
	return 0;
}

快速排序

在这里插入图片描述

#include<stdio.h>
#include<math.h>
#include<string.h>
void QuickSort(int* a, int begin, int end)
{
	int t;
	if (begin >= end)
	{
		return;
	}
	//一趟的实现
	int left = begin;
	int right = end;
	int keyi = left;
	while (left < right)
	{
		//右边开始行动   一定要加上等于,因为快速排序找的是一定比它小的值
		while (left < right && a[keyi] >= a[right])
		{
			right--;
		}
		//左边开始行动
		while (left < right &&   a[left] <= a[keyi])
		{
			left++;
		}
		t=a[left];
		a[left]=a[right];
		a[right]=t;
	}
	//wap(&(a[keyi]), &(a[right]));
	     t=a[keyi];
		a[keyi]=a[right];
		a[right]=t;
	keyi = right;
	//[begin,keyi-1] keyi [keyi+1,end]
	QuickSort(a, begin, keyi - 1);
	QuickSort(a, keyi+1, end);
}
int main(){
	int n;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
	scanf("%d",&a[i]);
	int s,m;
	scanf("%d %d",&s,&m);
	QuickSort(a,--s,--m);
	for(int i=0;i<n;i++){
		printf("%d ",a[i]);
	} 
	return 0;
}
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值