废纸堆

就是放了一些代码没什么用

/*
	比递归的剪枝更好的尾递归解法(比递推差)时间复杂度和递推一样,空间复杂度和递归一样 
*/
#include<stdio.h>
#include<stdlib.h>
unsigned long fiboProcess(unsigned long n,unsigned long prePreVal,
unsigned long preVal,unsigned long begin){
	if(n == begin)
		return preVal+prePreVal;
	else{
		begin++;
		return fiboProcess(n,preVal,prePreVal+preVal,begin);
	} 
}
unsigned long fibo(unsigned long n){
	if(n <= 1)
		return n;
	else
		return fiboProcess(n,0,1,2);	 
}
int main(int argc,char *argv[]){
	int n;
	scanf("%d",&n);
	unsigned long fiboNum = fibo(n);
	printf("the %lu result is %lu\n",n,fiboNum);
	return 0;
} 
/*
	鸡肋的高精度 
*/
#include<stdio.h>
#include<string.h>
#define MAXN 1500
char qian[MAXN]={'1'},hou[MAXN]={'1'},ans[MAXN];
void start(char *ans){
	for(int i=0;i<1500;i++){
		ans[i]=48;
	}
} 
void fbnazy(char *a,char *b,int len_a,int len_b); 
int main(){
	start(ans);
	int n,i,len_a,len_b;
	int flag=0;
	scanf("%d",&n);
	for(i=1;i<n;i++){
		len_a=strlen(qian);len_b=strlen(hou);
		qian[len_a]=48;
		hou[len_b]=48;
		fbnazy(qian,hou,len_a,len_b);
	}
	int len = strlen(hou);
	for(i=len-1;i>=0;i--){
		if(hou[i] == 48 && flag == 0) continue;
		else if(hou[i] == 48) printf("%c",hou[i]);
		else if (hou[i] != 48){
			printf("%c",hou[i]);
			flag=1;
		}
	}
	return 0;
}
//主要在下面这块 
void fbnazy(char *a,char *b,int len_a,int len_b){
	int len=(len_a > len_b?len_a:len_b);
	int i,d=0,*tmep;
	for(i=0;i<len;i++){
		ans[i]=a[i]+b[i]+d-48;
		d=0;
		while(ans[i] >= 58){
			ans[i]-=10;
			d++;
		}
	}
	if(d > 0){
		ans[len]=d+48;
	}
	for(i=0;i<=len;i++){
		a[i]=b[i];
		b[i]=ans[i];
	} 
}
/*
  求质因数分解,N!的质因数
*/
#include<math.h> 
#include<stdio.h>
#include<string.h> 
#define MAXLEN 10001
int primenumber[MAXLEN]={0};
int prime(int number){
	int tap;
	if(number == 1 || number == 0) return 0;
	for(tap=2;tap<=sqrt(number);tap++){
		if(number % tap == 0) return 0;
	}
	return 1;
} 
void soluprime(int number,int *primenumber){// 运用剪枝的递归 
	int i,j=0;
	if(prime(number) == 1){
		primenumber[number]++;
	} 
	else {
		for(i=2;i<number;i++){
			if(primenumber[i] != 0) j=i;//关键的剪枝部分,虽然好像不是很好,遍历一下 
			if(number % j == 0){
				primenumber[j]++;
				soluprime(number/j,primenumber);
			break;
			} 
		}
	}
}
int main(){
	int n,i;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		soluprime(i,primenumber);
	}
	for(i=1;i<=n;i++){
		if(primenumber[i] != 0){
			printf("%d %d\n",i,primenumber[i]);
		}
	}
	return 0;
} 
/*
	比较完整的求质因数的代码,可以使因子从小到大输出,10^15一样的快速 
*/
#include<stdio.h>
void prime(long long number){
	int tap;
	if(number == 1 || number == 0) printf("over");
	else {
		for(tap=2;tap<=number;tap++){
			if(number % tap == 0) {
				printf("%d ",tap);
				prime(number/tap);
				break; 
			}
		}
	}
} 
int main(){
	long long n;
	scanf("%lld",&n);
	prime(n);
	return 0;
} 
/*
	将学生信息输入,按成绩排序,如相同按学号从小到大排序 
*/
#include<stdlib.h> 
#include<stdio.h>
typedef struct birthday{
	int day;
	int month;
	int year;
} b;
typedef struct Students{
	int nums;
	char name[20];
	int sore;
	char sex;
	b birthday;  
} s;
int compare_and_swap(s *a,s *b){
	s temp;
	if(a->sore > b->sore || (a->sore == b->sore && a->nums < b->nums)){
		temp=*a;
		*a=*b;
		*b=temp;
	}
}
int main(){
	s *stu;
	int n,i,j;
	scanf("%d",&n);
	stu=calloc(n,sizeof(s));
	for(i=0;i<n;i++)
		scanf("%d %s %d %c %d %d %d",&stu[i].nums,stu[i].name,
		&stu[i].sore,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month
		,&stu[i].birthday.day);
	for(i=0;i<n;i++){
		for(j=0;j<n-1-i;j++){
			compare_and_swap(stu+j+1,stu+j);
		}
	}	
	for(i=0;i<n;i++)
		printf("%d %s %d %c %d %d %d\n",stu[i].nums,stu[i].name,
		stu[i].sore,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month
		,stu[i].birthday.day);
	return 0;
}

/*
  c语言中 qsort() 函数的应用
*/

int compare(const void *a,const void *b){
	int *p1=a,*p2=b;
	if(*p1 < *p2) return 1;
	else if(*p1 > *p2) return -1;
	else return 0;
}

int main(){

qsort(number,n,sizeof(int),compare);


}
/*
	斐波那契的全局变量,尾部递归,指针运用;
	简便的整形数组比较的方法; 
	发现:尾部递归和全局变量和指针一起用比较好用 
*/
#include<stdio.h>
#define MAXN 1001
int fibo[MAXN]={0,1,1};// 全局变量 
void fibonazy(int number,int *fibo){
	if(number == 0 ||number == 1 || number == 2);
	else {
		fibonazy(number-1,fibo);//尾部递归 
		*(fibo+number)=*(fibo+number-1)+*(fibo+number-2);//指针 
	}
}
int compare(const int *a,const int *b,const int len){//用于整形数组的比较,相同输出1,不同输出0; 
	int count=0;
	while(*a++ == *b++ && ++count);//这里很妙,*a++ == *b++是先进行*a和*b的比较然后再进行++(注意:while(a++)不会先进行下面的程序再进行a++而是a加了1后再执行下面的程序,因为while括号内的已经是一个表达式了,x++是整个表达式执行完成后再加1的),其次再利用&&的性质如果前面的a和b不相等那么就不会执行count++的命令可以精确的算出有多少个数组的元素相同
	if(count == len ) return 1;
	else return 0;
} 
int main(){
	int n,i,j,f[MAXN];
	scanf("%d",&n);
	fibonazy(n,fibo);
	for(i=0;i<n;i++)
		scanf("%d",&f[i]);
	if(compare(f,fibo,n)) printf("Yes");
	else printf("No");
	
	return 0;
} 
// 栈的应用:洛谷工程题
// 题目:https://www.luogu.com.cn/problem/P1010
// 利用函数的递归使用其实就是一个先进后出的栈的结构
#include <stdio.h>
#include <stdlib.h>
int turnto(int n, int *a)
{
    int i = 0;
    while (n > 0)
    {
        a[i++] = n % 2;
        n /= 2;
    }
    return i - 1;
}
void process(int n)
{
    int decimal[15]; // 每次的decimal都保存在这个栈的结构里了,防止再次用turnto函数时decimal里的数据被覆盖
    int len = turnto(n, decimal);
    for (int i = len; i >= 0; i--)
    {
        if (decimal[i] == 1)
        {
            printf("2");
            if (i > 2)
            {
                printf("(");
                process(i);
                printf(")");
            }
            else if (i == 2 || i == 0)
            {
                printf("(");
                printf("%d", i);
                printf(")");
            }
            for (int j = i - 1; j >= 0; j--)
            {
                if (decimal[j] == 1)
                {
                    printf("+");
                    break;
                }
            }
        }
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    process(n);
    system("pause");
    return 0;
}
posted @ 2022-10-29 22:26  MITE's_BKY  阅读(40)  评论(0)    收藏  举报