是一些算法随笔吖

这篇博客涵盖了多种编程技巧和算法应用,包括排序结构体、贪心算法、水仙花数、费波那契数列以及素数统计。示例代码展示了如何实现年龄和体重的排序,以及不同算法在解决问题上的应用,如寻找特定范围内的水仙花数和素数。此外,还涉及字符处理和字符串逆序操作。
摘要由CSDN通过智能技术生成

结构体的sort排序

struct node{
	int age;
	double weight;
};
int zzx(struct node a,struct node b){
	return a.age>=b.age;
	return a.weight<=b.weight; 
}

//如果年龄不同,按年龄降序排雷,如果年龄相同,按体重升序排列

for(int i = 18;i<28;i++){
	//这里就是按顺序输入而已 
	arr[i-18].age = i;
	arr[i-18].weight = i*1.2;
} 
arr[10].age = 18;
arr[10].weight = 12;
sort(arr,arr+11;zzx);
//浮点数不能直接比大小,尤其是0,因为会有精度误差 

==贪心算法 ==
MAX = 0x7fffffff;
Max = max(Max,temp);//看temp和Max谁最大,最大的值再赋给Max
//以下是全局最优解

while(n--){
	int temp;
	cin>>temp;
	//以下是局部最优解 
	Min = min(Min,temp);
	Min = min(Min,temp);
} 

一大类用此解决的问题:
一,事件序列问题
(有开始时间,结束时间,求最长序列,做过的看电视的题目
想要整体最长,就要局部最短
空心

#include<stdio.h>
int main(){
	int i,j,k;//行,列,每一行元素个数 
	int count;
	char ch;
	scanf("%d %c",&k,&ch);
	if(k%2==0) count=k/2;
	if(k%2!=0) count=k/2+1;//为啥奇数给它加一呢? 
	
	for(i=1;i<=count;i++){
			if(i!=1&&i!=count){
		for(j=1;j<=k;j++){
			if(j>1&&j<k)
			printf(" ");
			
			else
			printf("%c",ch);
		} 
	}
	else
		for(j=1;j<=k;j++){
		printf("%c",ch);
	}
	
	printf("\n");	
}	
}

水仙花

#include<stdio.h>
int pow(m,n){
    int j,s=1;
    for(j=1;j<=n;j++){
        s*=m;
    }
    return s;
}

int main()
{
 int n,m; 
 scanf("%d",&n);
 int x = 0;
 for(x = pow(10,n-1); x < (pow(10,n)); x++){
  int b = x;  
  int sum = 0, a = 0, i;
  for(i = 1; i <= n; i++){
      a = b%10; 
      b /= 10;  
      sum += pow(a,n);
    }
	if(sum == x) 
	printf("%d\n",x); 
 }
    

 return 0;
}

水仙花!!!

#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
    PrintN(m, n);
    if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

    return 0;
}
int narcissistic( int number ){
	int	num=number;
	int a,i,s,j=0;
	int sum=0;
	while(num!=0){
		num/=10;
        j++;
	}
	num=number;//你又忘了这步啦 
    while(num!=0){
        a=num%10;
        s=1;
        for(int i=0;i<j;i++){
        	s*=a;
		}
        sum+=s;
        num/=10;
    }
	if(sum==number) return 1;
	else 			return 0;
	
}

void PrintN( int m, int n ){
	for(int i=m+1;i<n;i++){//这里+1不能少的,不然你删除一下试试 
		if(narcissistic(i))   printf("%d\n",i);
	}
}

水仙花

#include <stdio.h>
#include <math.h>
int main()
{
 int n,m,a,b,c,i;
 scanf("%d %d",&m,&n);
 if(m<=n&&m>=100&&n<=999){
  for(i=m;i<=n;i++){
   a=pow(i/100,3);
   b=pow(i/10%10,3);
   c=pow(i%10,3);
   if(i==a+b+c){
    printf("%d\n",i);
   }
   }
  }
 else{
  printf("Invalid Value.");
  }
  return 0;
 
}

用调用函数算费波纳序列

#include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );

int main()
{
    int m, n, t;

    scanf("%d %d %d", &m, &n, &t);
    printf("fib(%d) = %d\n", t, fib(t));
    PrintFN(m, n);

    return 0;
}

int fib( int n ){
	if(n<=2) return 1;
	else return fib(n-1)+fib(n-2);
}

void PrintFN( int m, int n ){
    int i=0,count=0; 
    	for(int j=0;j<=21;j++){//为啥是小于21?
  		i++;//用来找f,i每加一1都去fib函数中找一圈
			int f=fib(i);//调用函数
			if(f>=m&&f<=n){//找到了并且在给定范围内
				if(count==0){//第一个数
					printf("%d",f);  
					count++;  
    			}else{//后面的数
    				printf(" %d",f);  
					count++;  
    			}
			} 
    	}
    	if(count==0){//范围内没有
			printf("No Fibonacci number");
		}
}

小于m的最大十个素数

#include <stdio.h>//顺便复习一下函数了 
int isprime(int k){//目的判断是不是素数,是就返回1,不是返回0 
	if(k==2)return 1;
	else if(k<=1)return 0;
	for(int i=2;i<k;i++)
		if(k%i==0)return 0;
	return 1;
}
int main(){
	int a,count=0;
	scanf("%d",&a);
	a--;
	for(;count<10;a--){
		if(isprime(a)){//这里函数isprime(a)
		//是把a带到上面的那个函数里,做一遍步骤之后再回来 
			printf("   %d",a);//也可以试试%6d,这个才是标准解 
			count++;
		}
	}
}

统计素数并求和

#include <stdio.h>
#include <math.h>
int main(){
	int m,n,b,sum=0,num=0,x,i;
	scanf("%d%d",&m,&n);
	if (m==1){//考虑m=1,而1不是素数也不是合数的情况
		m=2;
	}
	for(x=m;x<=n;x++){//从m开始用循环找出m至n之间的素数 
		b=sqrt(x);
		for(i=2;i<=b;i++){//判断区间[m,n]内的某一实数x是否为素数 
			if(x%i==0)//如果x为素数,则跳出寻找约数的循环 
			break;
		}
		if(i>=b+1){//找不到约数,确定是素数 
			num=num+1;//素数个数+1 
			sum=sum+x;
		}//素数求和
	}
	printf("%d %d",num,sum);
	return 0;
}

输出整数各位数字

#include <stdio.h>
//思路,用字符串读一个输出一个,确实不用计算咯 
int main() {
    char a;
    a = getchar();
    while (a >= '0'&&a <= '9') {//读到非数字为止,包括回车 
        printf("%c ", a);//
        putchar(a);
        a = getchar();
    }
    printf("\n");
    return 0;
} 

字符逆序

#include<stdio.h>
int main(){
	int i,k,t;
	i=0;
	char str[80];
	while((str[i]=getchar())!='\n')
		i++;
	str[i]='\0';
	
	i=i-1;
	while(i>0){
		printf("%c",str[i]);
		i--;
	} 
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值