首页 > 其他分享 >2024西北工业大学noj(C语言)记录

2024西北工业大学noj(C语言)记录

时间:2024-10-11 19:22:47浏览次数:3  
标签:return noj int double scanf 2024 西北工业大学 printf include

作者是零基础捏,仅作个人学习记录,多数题目会有更优解。
有些题目虽然AC了但是可能不严谨。
有错误请务必指正我
我做完之后会看去年学长发的贴子,各位可以直接看他们的,他们的算法确实更优,有些打的注解就是看过他们的文章后加入的。
如果各位有优解可以在评论区或者私信教我hh

1-10水题

1.Hello World

#include<stdio.h>
int main()
{
    printf("Hello World");
    return 0;
}

2.A+B

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d",a+b);
    return 0;
}

3.数据类型大小及范围

#include<stdio.h>
int main()
{
    int d;
    scanf("%d",&d);
    switch(d){
    case 1:printf("1,-128,127");break;
    case 2:printf("1,0,255");break;
    case 3:printf("2,32768,32767");break;
    case 5:printf("4,-2147483648,2147483647");break;
    case 6:printf("4,0,4294967295");break;
    case 7:printf("4,-2147483648,2147483647");break;
    case 8:printf("4,0,4294967295");break;
    case 9:printf("8,-9223372036854775808,9223372036854775807");break;
    case 10:printf("8,0,18446744073709551615");break;
    }
return 0;
}

做这题的时候还不会sizeof(),用生命代替计算机计算了说是。
补:从大佬们那里学到可以用C语言标准库<limits.h>来做,省去手敲数字部分。
4.均值

#include<stdio.h>
int main()
{
    long long int a,b,c;
    scanf("%lld %lld",&a,&b);
    c=a+(b-a)/2;
    printf("%lld",c);
    return 0;
}

用a+(b-a)/2(这里的“/2”你用位运算符“>>1”也OK)是为了防止溢出,其实我用int类型(a+b)/2也AC了hh.

5.进制转换

#include<stdio.h>
int main()
{
    unsigned a;
    scanf("%u",&a);
    printf("%X,%o",a,a);
    return 0;
}

6.浮点数输出

#include<stdio.h>
int main()
{
    double a;
    scanf("%lf",&a);
    printf("%.6lf,%.2lf,%.8lf",a,a,a);
    return 0;
}

7.动态宽度输出

#include<stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    printf("%0*d",n,m);
    return 0;
}

8.计算地球上两点之间的距离

#include<stdio.h>
#include<math.h>
#define PI 3.1415926
double hav(double x);
double cha(double x){
    return x*PI/180.0;
}
double func(double a,double b,double c,double d){
    return 6371*acos(1-2*((hav(c-a))+cos(a)*cos(c)*hav(d-b)));
}
int main()
{
    double a,b,c,d;
    scanf("%lf %lf",&a,&b);
    scanf("%lf %lf",&c,&d);
    printf("%.4lfkm",func(cha(a),cha(b),cha(c),cha(d)));
    return 0;
}
double hav(double x){
 return sin(x/2)*sin(x/2);
}

输入的是角度,记得转弧度。
9.风寒指数

#include<stdio.h>
#include<math.h>
int chill(double x,double y)
{
    double b=13.12+0.6215*y-11.37*pow(x,0.16)+0.3965*y*pow(x,0.16);
     int a=(int)(b+0.5);
    return a;
}
int main()
{
    double a,b;
    scanf("%lf %lf",&a,&b);
    printf("%d",chill(a,b));
    return 0;
}

图看半天,就下面一行公式有用,麻
10.颜色模型转换

#include<stdio.h>
double max(double x,double y,double z){
    return a>=b?(a>=c?a:c):(b>=c?b:c);
 }
double min(double x,double y,double z){
    return a<=b?(a<=c?a:c):(b<=c?b:c);
}
int main()
{
    double R,G,B;
    double V,S,H,M,I;
    scanf("%lf %lf %lf",&R,&G,&B);
    R=R/255;G=G/255;B=B/255;
    M=max(R,G,B);
    I=min(R,G,B);
    V=M;
    S=(M-I)/M;
    if(M==R){
        H=60*(G-B)/(M-I);
    }
    else if(M==G){
        H=60*(2+(B-R)/(M-I));
    }
    else H=60*(4+(R-G)/(M-I));
    if(H<0) H=H+360;
    printf("%.4lf,%.4lf%%,%.4lf%%",H,S*100.0,V*100.0);
    return 0;
}

11-20循环

11.操作数

#include<stdio.h>
int wei(int x){
    int a;
    for(a=0;x>0;a++){
        x/=10;
    }
return a;
}
int he(int x,int y){
     int a,t;
     for(a=1,t=0;y>0;a*=10,y--){
        t+=x/a%10;
     }
     return t;
}
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=0;n>0;i++){
        n=n-he(n,wei(n));
    }
    printf("%d",i);
    return 0;
}

he是和的拼音()
12.分数的加减乘除法

#include<stdio.h>
#include<math.h>
int gcd(int x,int y){
    if(y)
        return gcd(y,x%y);
    else return x;
}
int main()
{
    int a,b,c,d;
    scanf("%d/%d %d/%d",&a,&b,&c,&d);
    printf("(%d/%d)+(%d/%d)=%d/%d\n",a,b,c,d,(a*d+b*c)/gcd(a*d+b*c,b*d),b*d/gcd(a*d+b*c,b*d));
    printf("(%d/%d)-(%d/%d)=%d/%d\n",a,b,c,d,(a*d-b*c)/gcd(a*d-b*c,b*d),b*d/gcd(a*d-b*c,b*d));
    printf("(%d/%d)*(%d/%d)=%d/%d\n",a,b,c,d,a*c/gcd(a*c,b*d),b*d/gcd(a*c,b*d));
    printf("(%d/%d)/(%d/%d)=%d/%d\n",a,b,c,d,(a*d)/gcd(a*d,b*c),b*c/gcd(a*d,b*c));

    return 0;
}

这道题用到了求最大公约数(欧几里得算法)

13.级数和

#include<stdio.h>
double sum(double n)
{
    double t,d,s;
    for(t=1;t<n;t++)
   {if(t+1<10)d=(t+1)/10;
           else d=(t+1)/100;
        printf("%g+",d+t);
    s+=t+d;
   }
   if (t+1==100)d=0.1,printf("%g",d+t);
   else if(t+1<10)d=(t+1)/10,printf("%g",d+t);
   else d=(t+1)/100,printf("%g",d+t);
   s+=t+d;
   return s;
}
int main()
{
    double n;
    scanf("%lf",&n);
    printf("=%g",sum(n));
}

这里我把最后一位分开进行判断是因为我原本在倒数第二行“=%g”前边用了退格符,把多余的一个加号去掉,它报错了我就分开打了。
14.倍数和

#include<stdio.h>
int main()
{
    int T,i,sum,d;
    scanf("%d",&T);
    int A[T];
    for(i=0;i<=T-1;i++){
        scanf("%d",&A[i]);
        }
    for(i=0;i<=T-1;i++){
    for(sum=0,d=1;d<A[i];d++){

            if(d%3==0||d%5==0)sum+=d;
    }

        printf("%d\n",sum);
    }
    return 0;
}

这道题一开始完全不会做,是看了去年学长的文章才知道要用数组的。
没有获得授权就不转了。
15.组合数

#include<stdio.h>
int pair(int n)
{
    int a,b,c,d,i=0;
    for(a=0;a<=9;a++)
        for(b=0;b<=9;b++)
            for(c=0;c<=9;c++)
                for(d=0;d<=9;d++){
                    if(a+b+c+d==n)i++;

                }
    printf("%d",i);
}
int main()
{
    int n;
    scanf("%d",&n);
    pair(n);
    return 0;
}

16.幂数模

#include<stdio.h>
int main()
{
    long long unsigned a,b,c,d=1;
    scanf("%llu%llu%llu",&a,&b,&c);
    //a=a%c;
    while(b!=0){
        if(b%2==1)d=(d*a)%c;
        b/=2;
        a=(a*a)%c;
    }
    printf("%llu",d);
    return 0;
}

用到快速幂以及取模(求余)。
有个同学是在我代码注释部分加上了这个,理论是没错,但是noj报WA,我放去洛谷AC了,怪怪的。
17.比率

#include<stdio.h>
int gcd(int x,int y)
{
    if(y)return gcd(y,x%y);
    else return x;

}
int main()
{
    double a,n=1;
    int d;
    scanf("%lf",&a);
    double t=a;
    d=(int)a;
    while(d!=t){
        n*=10;
        t=n*a;
        d=(int)t;
    }
    int b=(int)n;
    printf("%d/%d",d/gcd(d,b),b/gcd(d,b));
    return 0;
}

补:从大佬那里学到可以用floor()取整,就不用(int)强行取整了
18.乘数模

#include<stdio.h>
int main()
{
    long long unsigned a,b,m;
    scanf("%llu%llu%llu",&a,&b,&m);
    printf("%llu",((a%m)*(b%m)%m));
    return 0;
}

在前面做幂数模的时候看了取模的运算法则做这道题就会简单。
19.方阵

#include<stdio.h>
int main()
{
    int n,t;
    scanf("%d",&n);
    for(t=1;t<=n;t++)
    {
        int p;
        for(p=1;p<=n;p++)
        {
            if(t>=p)printf("%d ",t-p);
            else printf("%d ",p-t);
        }
        printf("\n");
    }
    return 0;
}

20.对称数

#include<stdio.h>
int wei(int x)
{
    int a;
    for(a=0;x>0;a++)
    {
        x/=10;
    }
    return a;

}
int main()
{
    int a,m,count;
    scanf("%d",&a);
    int n=wei(a);
    int A[n];
    for(m=1,count=0;count<=n-1;count++,m*=10)
    {
        A[count]=a/m%10;
    }
    for(count=0;count<=n-1;count++)
    {
            if((A[count]==1&&A[n-1-count]==1||A[count]==8&&A[n-1-count]==8||A[count]==0&&A[n-1-count]==0||A[count]==9&&A[n-1-count]==6||A[count]==6||A[n-1-count]==9)==0)
            {
                printf("No");
                break;
            }
    }
    if(count==n)printf("Yes");
    return 0;

呃呃,应该是转180吧,转360做什么。
这里我选择用数组把各个位数录进去,然后进行判断。

21-30枚举

21.竖式乘法

#include<stdio.h>
int wei(int n)
{
    int i;
    if(n==0)return 1;
    for(i=0;n>0;i++)
        n/=10;
    return i;
}
void load(int A[],int a)
{
    int i=wei(a),t;
    int m;
    for(m=1,t=i;i>0;i--){
        A[t-i]=a/m%10;
        m*=10;
    }
}
int main()
{
    int n,A[100],b,numtotal;
    scanf("%d%d",&b,&n);
    numtotal=wei(b*n)+1;
    int numn=wei(n),numb=wei(b);
    load(A,n);
    int t,i,p=0;
    for(t=0;t<numn;t++){
        A[t]=A[t]*b;
    }
    for(t=0;numtotal-numb-t>0;t++)printf(" ");
    printf("%d\nx",b);
    for(t=1;numtotal-numn-t>0;t++)printf(" ");
    printf("%d\n",n);
    for(t=0;numtotal-t>0;t++)printf("-");
    printf("\n");
    for(t=0;t<numn;t++){
        if(t==numn-1)p++,printf("+");
        for(i=0;numtotal-i-t-p-wei(A[t])>0;i++)printf(" ");
            printf("%d\n",A[t]);
    }
    for(t=0;numtotal-t>0;t++)printf("-");
    printf("\n %d",b*n);
    return 0;
}

裹脚布,麻
不过很多部分是重复的,搞清楚核心其实还好
22.俄罗斯农夫乘法

#include<stdio.h>
int main()
{
    int a,b,sum=0;
    scanf("%d%d",&a,&b);
    if(a==0||b==0);
    else if(a==1)sum=a*b;
    else   {printf("%d %d\n",a,b);
        if(a%2==1)sum=b;
        while(a!=1){
        a/=2;
        b*=2;
        if(a%2==1)sum+=b;
        printf("%d %d\n",a,b);
    }
    }
    printf("%d",sum);
    return 0;
}

23.方案数

#include<stdio.h>
int main()
{
    int n,cnt,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        int t=0;
        for(j=i;t<n;j++)
            t+=j;
        if(t==n)cnt++;
    }
    printf("%d",cnt);
    return 0;
}

这道题我没有从原理出发,推荐看学长们的。

标签:return,noj,int,double,scanf,2024,西北工业大学,printf,include
From: https://blog.csdn.net/intern1ty/article/details/142857256

相关文章

  • 20222316 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    一、实验内容缓冲区溢出定义:缓冲区溢出是一种程序错误,在这种情况下,数据被写入到内存中的缓冲区时超过了该缓冲区所能容纳的最大容量。当超过缓冲区的边界时,额外的数据会溢出到相邻的内存位置中,覆盖掉其他数据或指令,导致程序行为异常或系统安全漏洞。缓冲区溢出的原因:编程......
  • 绘图工具Origin 2024简体中文版百度云
    如大家所了解的,Origin是一款功能强大的图形可视化和数据分析软件,也是科研人员和工程师常用的数据分析和制图工具。Origin为初学者提供了一个易于使用的界面,并且随着用户对应用程序的熟悉,结合了执行高级定制的能力。目前最新为Origin2024版本。Origin8.0-2024: https://pan......
  • 论文分享---CVPR2024:用于单源域泛化目标检测的无偏 Faster R-CNN
     论文地址https://arxiv.org/pdf/2405.15225简介:此论文由刘亚静,周世军,刘希尧,郝春辉,范宝杰,田建东,中国科学院沈阳自动化研究所机器人国家重点实验室、中国科学院机器人与智能制造研究所、中国科学院大学、南京邮电大学在CVPR2024上发表。摘要单源域泛化(SDG)物体检测是一项......
  • 20222311 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    202223112024-2025-1《网络与系统攻防技术》实验一实验报告1.实验内容本次实验主要内容为BOF注入攻击,任务如下:掌握反汇编及其指令修改程序的机器指令,从而实现BOF注入攻击注入一段Shellcode,以实现BOF注入攻击2.实验过程任务1:修改可执行文件机器指令,改变程......
  • # 20222409 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1逆向工程与汇编基础:掌握了汇编指令(如NOP、JMP等)在控制程序流中的作用。学会使用objdump反汇编可执行文件,并通过十六进制编辑器修改机器码以改变程序执行流程。1.2缓冲区溢出(BufferOverflow)原理:了解堆栈结构和返回地址覆盖,理解如何通过超长输入覆盖返回地址来控......
  • 2024年还不知道如何清理c盘?最齐全的C盘清理指南!(非常详细)零基础入门到精通,收藏这一篇就
    这段时间以来,我收到最多的问题还是问如何解决C盘爆满,那么今天就来给大家详细讲述一下该怎么给C盘“瘦身”。我之前在文章《带你全面了解你的C盘!并且给它“瘦身”!》中讲到过C盘各个文件夹的作用,也提到过一些清理C盘的方法,但是它并不全面,大家都知道C盘中存放着很多的系统文件......
  • 2024护网行动:HW常见红队使用工具_红队工具
    目录什么是HW?什么是网络安全红蓝对抗?红队常见工具信息收集工具Nmap简介漏洞扫描工具Nessus简介AWVS简介抓包工具Wireshark简介TangGo简介web应用安全工具Burpsuite简介SQLMapwebshell管理工具蚁剑冰蝎后渗透工具CobaltStrikeMeterpreter密码破......
  • [45] (多校联训) A层冲刺NOIP2024模拟赛05
    这是什么午休,大黄突然走进来大黄:闪电特效!其他人:?大黄:5k!其他人:???大黄:【闪电特效】【闪电特效】男人中的男人【闪电特效】【闪电特效】雄性中的雄性【闪电特效】【闪电特效】巅峰!【闪电特效】【闪电特效】A.好数简单变形一下\[f_i+f_j+f_k=c\]\[f_j+f_k=c-f_i\]然......
  • 2024最新最全:网络安全人士【必备的30个安全工具】
    1.WiresharkWireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。2.MetasploitMetasploit是一个免费的、可下载的框架,通过它可以很容易......
  • 2024红队必备工具列表总结_railgun工具
    一、信息收集1、AppInfoScanner一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如:Title、Domain、CDN、......