PTA-练习8

目录

实验5-3 使用函数求Fibonacci数

实验5-4 输出每个月的天数

实验5-9 使用函数求余弦函数的近似值

实验5-11 空心的数字金字塔

实验6-6 使用函数验证哥德巴赫猜想

实验6-7 使用函数输出一个整数的逆序数

实验6-8 使用函数输出指定范围内的完数

实验8-1-7 数组循环右移

实验8-1-8 报数

实验8-2-4 使用函数实现字符串部分复制

实验8-2-9 长整数转化成16进制字符串


实验5-3 使用函数求Fibonacci数

/*int fib( int n ){
    if(n<3){
        return 1;
    }
    return fib(n-1)+fib(n-2);
}
*///这个个玩意会超时,
//使用数组试试看
#include <stdlib.h>
int fib( int n ){
    int *a=(int *)malloc(sizeof(int)*(n+1));
    a[1]=a[2]=1;
    for(int i=3;i<=n;i++){
        a[i]=a[i-1]+a[i-2];
    }
    return a[n];
}

实验5-4 输出每个月的天数

int MonthDays(int year, int month){
    switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        default:
            break;
    }
    if(month==2){
        if((year%4==0&&year%100!=0)||year%400==0){
            return 29;
        }
        return 28;
    
    }
}


实验5-9 使用函数求余弦函数的近似值


double funcos( double e, double x ){
    //pow(x,i)/jiecheng(i)//                                                                                                                                                ;
    double cosx=0;
    int i=0;
    double xiang=1;
    while(fabs(xiang)>=e){
        int jiecheng=1;
        i=i+2;
        for(int j=1;j<=i;j++){
            jiecheng=jiecheng*j;
        }
        cosx=xiang+cosx;
        xiang=pow(x,i)/jiecheng*pow(-1,i/2);
    }
    cosx=xiang+cosx;
    return cosx;
    
}

实验5-11 空心的数字金字塔

//n==1,   1
//n==2,   1
         //222
//n==3,
             /*

    1
   2 2
  33333
             */
//n==4
             /*
    1
   2 2
  3   3
 4444444
 */

//第一行是n-1个空格,+1
//第二行是,n-2空格,非最后一行就是中间2*n-3个空格

             
void hollowPyramid( int n ){

    for(int i=1;i<=n;i++){//每一行
        
        for(int j=1;j<=n-i;j++){
            printf(" ");
        }
        if(i==1){
            printf("%d",i);
        }else if(i>1&&i<n){
            printf("%d",i);
            for(int k=1;k<=2*i-3;k++){
                printf(" ");
            }
            printf("%d",i);
        }else if(i==n){
            for(int k=1;k<=2*i-1;k++){
                printf("%d",i);
            }
        }
        printf("\n");
    }
}


实验6-6 使用函数验证哥德巴赫猜想

//素数的判定,在2~~p/2之间如果有可以整除的数就不是
int prime( int p ){
    if(p==1){
        return 0;
    }
    for(int i=2;i<=p/2;i++){
        if(p%i==0){
            return 0;
        }
    }
    return 1;
}

void Goldbach( int n ){

    for(int i=2;i<=n/2;i++){
        if(prime(i)&&prime(n-i)){
            printf("%d=%d+%d",n,i,n-i);
            return ;
        }
    }
}


实验6-7 使用函数输出一个整数的逆序数

这题注意如何取数字,填数字,只需要每每得到一个数字,然后就把前面的数字*进制+这个数字。

即:在末尾填数字的方法:原数字*进制+这个数字

十进制:123的末尾加上4,得到1234,

                   只需要123*10+4=1234

二进制:101110在末尾加上1,得到1011101

int reverse( int number ){
	int sum=0;
	while(number){
		int d=number%10;
		sum=sum*10+d;
		number/=10;
	}
	return sum;
}
//因为负数对10取余余数还是负数,所以这里不用对负数进行特殊操作

实验6-8 使用函数输出指定范围内的完数

#include <stdio.h>

int factorsum( int number );
void PrintPN( int m, int n );
    
int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
    if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
    PrintPN(m, n);

    return 0;
}

/* 你的代码将被嵌在这里 */

int factorsum( int number ){
    int sum=0;
    for(int i=1;i<number;i++){
        if(number%i==0){
            sum=sum+i;
        }
    }
    return sum;
}
void PrintPN( int m, int n ){
    int sum=0;
    for(int i=m;i<=n;i++){
        if(factorsum(i)==i){
            sum++;
            printf("%d = 1",i);
            for(int j=2;j<i;j++){
                if(i%j==0){
                    printf(" + %d",j);
                }
                if(j==i-1){
                    printf("\n");
                }
            }
        }//of if输出一个完数的和形式
    }
    if(sum==0){
        printf("No perfect number");
    }
}

实验6-9 使用函数输出指定范围内的Fibonacci数

int fib( int n ){
    if(n<3){
        return 1;
    }
    return fib(n-1)+fib(n-2);
}
void PrintFN( int m, int n ){//20 100
    int sum=0;
    for(int i=m;i<=n;i++){
        if(i==1&&n==1){
            sum++;
            printf("1 1");
            break;
        }
        if(i==1){
            sum++;
            printf("%d ",i);
        }

        int x=fib(1);
        int j=1;
        while(i>=x){//20>1
            if(i==x){
                sum++;
                if(fib(j+1)>n){
                    printf("%d",i);
                    break;
                }
                printf("%d ",i);
                break;
            }
            j++;
            x=fib(j);
            
        }//of while
    }
    if(sum==0){
        printf("No Fibonacci number");
    }
}

实验8-1-7 数组循环右移

//循环右移:构造一个数组b[m]用来存放最后的m个数,
//然后将0~~n-1-m个元素后移m个,然后把b[m]补全到前面

void ArrayShift( int a[], int n, int m ){
    
    m=m%n;
    
    int b[m+1];
    for(int i=n-m,j=0;i<=n-1;j++,i++){
        b[j]=a[i];
    }
    for(int i=n-1-m;i>=0;i--){
        a[i+m]=a[i];
    }
    for(int i=0;i<m;i++){
        a[i]=b[i];
    }
}
void ArrayShift(int a[], int n, int m) {
    // 避免 m 过大时重复移动,求模后只移动一次
    m %= n;
    int tmp[n];
    // a[i] 循环右移 m 个位置后下标由 i 变为 (n-m+i)%n,需推导求出
    for (int i = 0; i < n; i++) {
        tmp[i] = a[(n - m + i) % n];
    }
    // 重新赋值给 a[]
    for (int i = 0; i < n; i++) {
        a[i] = tmp[i];
    }
}

实验8-1-8 报数

这题我真的要无语了,这种找规律的题真的是一点都不想做。。。。。

//out[i]存放的是编号i+1推出的次序
void CountOff( int n, int m, int out[] ){
    out[n]=0;
    int x=1;//表示出去的次序
    int y=0;//表示现在的位置
    int sum=m;
    while(1){
        if(out[y]==0){
            sum--;
            y=(y+1)%n;
        }else{
            y=(y+1)%n;
        }
        if(sum==0){
            out[(y-1+n)%n]=x;
            sum=m;
            x++;
        }
        if(x==n+1){
            return;
        }
    }
}

 

实验8-2-4 使用函数实现字符串部分复制

空字符:'\0'

空字符串:""

#include <string.h>
void strmcpy( char *t, int m, char *s ){
    int n=strlen(t);
    
    if(m>n){
        strcpy(s,"");
        return;
    }
    int i,j;
    for(i=m-1,j=0;i<n;i++,j++){
        s[j]=t[i];
    }
    s[j]='\0';
    
}

实验8-2-9 长整数转化成16进制字符串

C语言学习--字符串和整型的转换-CSDN博客

//把长整型123456789变成16进制,
//10/2=5'''0
//5/2=2’‘’1
//2/2=1'''0
//1/2=0'''1
//所以十的二进制就是1010
//同理转换成16进制就是每次除以个16,取余数,放入字符串数组a
//然后知道商为零,然后把a逆序给p
//'0'=48,'A'=65,'a'=97

#include <stdlib.h>
#include <string.h>

void f( long int x, char *p ){
    /*
    int j=0;
    int flag=0;
    if(x<0){
        flag=1;
        x=-1*x;
    }
    if(x==0){
        strcpy(p,"0");
        return;
    }
    char a[10000]="";
    while(x!=0){
        int i=x%16;
        if(i<10){
            a[j]=i+'0';
            j++;
        }else if(i>=10){
            switch(i){
                case 10:
                    a[j]='A';
                    break;
                case 11:
                    a[j]='B';
                    break;
                case 12:
                    a[j]='C';
                    break;
                case 13:
                    a[j]='D';
                    break;
                case 14:
                    a[j]='E';
                    break;
                case 15:
                    a[j]='F';
                    break;
            }
            j++;
        }
        x=x/16;
    }
    int haha=0;
    if(flag==1){
        p[0]='-';
        haha++;
        for(int i=1;i<=j;i++){
            p[i]=a[j-i];
        }
    }else{
        for(int i=haha;i<j;i++){
        p[i]=a[j-i-1];
        }
    }
    */
    int flag=0;
    if(x<0){
        x=-1*x;
        flag=1;
    }
    sprintf(p,"%x",x);
    int n=strlen(p);
    if(flag){
        for(int i=n-1;i>=0;i--){
            p[i+1]=p[i];
        }
        p[0]='-';
    }
    
    for(int i=0;i<=n;i++){
        
        if(p[i]>='a'&&p[i]<='z'){
            p[i]=p[i]-32;
        }
    }
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/489663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javascript三要素核验身份证号、姓名和人像是否匹配的身份证实名认证接口

在开发的过程中&#xff0c;总会用到各种各样的API接口来实现各种各样的功能。互联网信息时代&#xff0c;为确保注册用户身份信息的正确性&#xff0c;无论是手机端还是电脑端应用都需要进行实名认证来防止虚假身份的使用&#xff0c;维护公共利益和个人权益的安全&#xff0c…

云原生安全

云安全 https://wiki.teamssix.com 云服务安全 云服务&#xff0c;顾名思义就是云上的服务&#xff0c;简单的来说就是在云厂商&#xff08;例如 AWS、阿里云&#xff09;那里买的服务 云服务 S3 对象存储Simple Storage Service&#xff0c;简单的说就是一个类似网盘的东…

消息预知在线客服系统php网站源码

安装教程 服务器环境&#xff1a; 宝塔面板 &#xff0c;Nginx1.16-1.18&#xff0c;7.2.23<php<7.3&#xff08;因为升级了客服系统&#xff09;&#xff0c;Mysql5.6- Mysql5.7 网站运行目录为./public/ 访问网址http://你的域名/install.php进入安装程序即可 源码免…

制作小程序需要多少钱?成本分析与效益预测

在当今数字化时代&#xff0c;微信小程序已成为企业和个人拓展业务的重要工具。然而&#xff0c;许多人在考虑进入这一领域时&#xff0c;都会面临一个关键问题&#xff1a;制作一个小程序需要多少钱&#xff1f;下面和你一起探讨小程序开发的成本因素&#xff0c;帮助你更好地…

LGBM算法 原理

简介 GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型&#xff0c;其主要思想是利用弱分类器&#xff08;决策树&#xff09;迭代训练以得到最优模型&#xff0c;该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界应用广泛&#xff0c;通常被…

机器学习模型及其使用方法——《机器学习图解》

本书教你两件事——机器学习模型及其使用方法 机器学习模型有不同的类型&#xff0c;有些返回确定性的答案&#xff0c;例如是或否&#xff0c;而另一些返回概率性的答案。有些以问题的形式呈现&#xff1b;其他则使用假设性表达。这些类型的一个共同点是它们都返回一个答案或…

【Linux】文件系统

文章目录 1. 理解文件系统2. inode3. 软硬链接3.1 硬链接3.2 软链接3.3 软硬链接的原理 1. 理解文件系统 我们使用 ls -l 的时候看到的除了看到文件名&#xff0c;还看到了文件元数据。 [rootlocalhost linux]# ls -l 总用量 12 -rwxr-xr-x. 1 root root 7438 "9月 13 1…

第十三届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 排列字母试题 B: 灭鼠先锋试题 C: 质因数个数试题 D: 数位排序试题 E: 蜂巢试题 F : \mathrm{F}: F: 爬树的甲壳虫试题 G: 重新排序试题 H \mathrm{H} H : 技能升级试题 I: 最优清零方案试题 J : \mathrm{J}: J: 推导部分和 发现宝藏 …

Mysql数据库函数【Mysql】

Mysql数据库函数【Mysql】 前言版权Mysql数据库函数常用函数排序与分页排序分页 单行函数2.数值函数2.1基本函数2.2角度与弧度2.3三角函数2.4指数与对数函数2.5进制间的转换 3.字符串函数4.日期和时间函数4.1获取日期、时间4.2日期与时间戳的转换4.3获取月份、星期、星期数、天…

在视频号上如何开店?个人玩家可以来做吗?过来人经验分享!

大家好&#xff0c;我是电商小布。 随着视频号小店这个项目的发展&#xff0c;整个体系越来越成熟&#xff0c;数据也在逐渐上升。 就去年来看&#xff0c;视频号带货的GMV值已经超过了3000亿&#xff0c;整个订单的数量增长了244%。 那么作为一个电商新手&#xff0c;想要在…

代码随想录算法训练营第三十天| 回溯算法总结

回溯算法核心&#xff1a;for循环横向遍历&#xff0c;递归纵向遍历&#xff0c;回溯不断调整结果集。对于startIndex&#xff08;startIndex来控制for循环的起始位置&#xff09;的使用&#xff1a; 如果是一个集合来求组合的话&#xff0c;就需要startIndex&#xff0c;例如…

计算机领域热门技术词汇

文章目录 计算机领域热门技术词汇1、机器学习 machine learning2、神经网络 neural network3、深度学习 deep learning4、自然语言处理 natural language processing5、计算机视觉 computer vision6、大数据 big data7、数据挖掘 data mining&#xff08;DM&#xff09;8、云计…

图像变换(python)

前言 这个Python没学过&#xff0c;写的是真的不方便&#xff0c;有很多问题还没解决&#xff0c;暂时不想写了&#xff0c;感兴趣的同学可以完善一下。设计的思路就是摆几个控件然后将对应的函数实现&#xff0c;这个Python的坐标放置以及控件的大小我没弄懂&#xff0c;算出…

Prometheus(六):Blackbox监控安装配置

目录 1 Blackbox Exporter安装配置1.1 Blackbox Exporter简介1.2 安装1、安装-使用源码包安装下载安装blackbox.yml文件配置快速启动文件 2、安装-使用docker 1.3 Prometheus配置1、http监控2、ping探测-ip3、https probe-DNS解析4、metrics配置5、TCP监控-探测端口 总结 1 Bla…

词曲创作只需几秒,「AI作曲家」Suno引爆音乐圈,第一手体验和攻略来了

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 有了 Suno 这个「作曲助手」&#xff0c;人人都可以创建自己想听的歌曲。 自…

【在FastAPI应用中嵌入Gradio界面的实现方法】如何在有一个Fastapi应用的基础上,新加一个gradio程序

官网教程&#xff1a;https://www.gradio.app/guides/sharing-your-app#mounting-within-another-fast-api-app 实践&#xff1a; import gradio as gr from fastapi import FastAPI from starlette.middleware.cors import CORSMiddlewareCUSTOM_PATH "/gradio"a…

Java八股文(SpringCloud)

Java八股文のSpringCloud SpringCloud SpringCloud 什么是Spring Cloud&#xff1f; Spring Cloud是一个用于构建分布式系统的开发工具箱&#xff0c;它基于Spring Boot框架&#xff0c;提供了一系列的组件和工具&#xff0c;用于帮助开发者快速搭建和管理分布式系统中的各种常…

javaSwing愤怒的小鸟游戏

一、简介 游戏名称是“愤怒的小鸟”&#xff0c;英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏&#xff0c;从2009年12月上市到iOS。&#xff0c;讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…

Warning logs 2024-03-23

给旧的笔记本安装ubuntu系统&#xff0c;并实现ssh远程连接 1、下载ubuntu系统 ubuntu下载链接 选择带桌面版本 2、准备U盘 3、使用UltraISO制作启动盘 使用UltraISO&#xff0c;打开刚才下载的ubuntu**.iso文件 4、进入BIOS&#xff0c;选择U盘启动 5、Warning 1 invali…

实时数仓项目《二》-利用chatgpt prompt完成基础维表的创建

系列文章&#xff1a; 实时数仓项目《一》-实时数仓架构-CSDN博客 目录 5. ods->dwd:维表关联方案及维表加工、导入hbase 5.1 维表关联方案 5.2 退维后结果去向 5.3 创建维表&#xff1a;基础业务库表数据同步到hbase 5.3.1 cdc 读取mysql数据&#xff0c;生成临时映射…