西工大noj(C程序设计)100题代码参考

西工大noj100题

已更新到100题,3道WA,飞机、字符串替换、日出日落

代码托管仓库和pdf代码总结

西工大考研复试机试也可以参考一下,可能会有类似题目。
github仓库:link
70-100题的题目截图在github仓库和pdf总结中可见。
如果github日常抽风无法正常访问,可以访问下面的gitee仓库。
gitee仓库:link
查看pdf请访问github:下载pdf

1-10

1.Hello World

请添加图片描述

#include <stdio.h>


int main()
{
    printf("Hello World");
}

2.A+B

请添加图片描述

#include <stdio.h>

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    int c = a+b;
    printf("%d",c);
}

3.数据类型大小及范围

请添加图片描述

#include <stdio.h>
#include <limits.h>

int main() {
    int choice;
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("%zu,%d,%d\n", sizeof(char), CHAR_MIN, CHAR_MAX);
            break;
        case 2:
            printf("%zu,%d,%u\n", sizeof(unsigned char), 0, UCHAR_MAX);
            break;
        case 3:
            printf("%zu,%d,%d\n", sizeof(short), SHRT_MIN, SHRT_MAX);
            break;
        case 4:
            printf("%zu,%d,%u\n", sizeof(unsigned short), 0, USHRT_MAX);
            break;
        case 5:
            printf("%zu,%d,%d\n", sizeof(int), INT_MIN, INT_MAX);
            break;
        case 6:
            printf("%zu,%u,%u\n", sizeof(unsigned int), 0, UINT_MAX);
            break;
        case 7:
            //printf("%zu,%d,%d\n", sizeof(int), INT_MIN, INT_MAX);
            printf("%zu,%ld,%ld\n", sizeof(long), LONG_MIN, LONG_MAX);
            break;
        case 8:
            printf("%zu,%u,%lu\n", sizeof(unsigned long), 0UL, ULONG_MAX);
            //printf("%zu,%u,%u\n", sizeof(unsigned int), 0, UINT_MAX);
            break;
        case 9:
            printf("%zu,%lld,%lld\n", sizeof(long long), LLONG_MIN, LLONG_MAX);
            break;
        case 10:
            printf("%zu,%u,%llu\n", sizeof(unsigned long long), 0ULL, ULLONG_MAX);
            break;
        default:
            printf("无效的编号\n");
            break;
    }

    return 0;
}

4.平均值

请添加图片描述

#include <stdio.h>

int main(){
    long long a,b;
    scanf("%lld %lld",&a,&b);
    long long c=a/2+b/2;
    printf("%lld\n",c);
}

5.进制转换

请添加图片描述

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

6.浮点数输出

请添加图片描述

#include <stdio.h>

int main(){
    double a;
    scanf("%lf",&a);
    printf("%.6lf,%.2lf,%.8lf",a,a,a);

}

//1234567.8912345678

7.动态宽度输出

请添加图片描述

#include <stdio.h>

int main(){
    long long m,n,t,num;
    int zero=0;
    num=0;
    scanf("%lld %lld",&m,&n);
    t=m;
    while(t>0){
        t=t/10;
        num++;
    }
    if(num==n||num>n){
        printf("%lld\n",m);
    }
    else{
        num=n-num;
        while(num--){
            printf("%d",zero);
        }
        printf("%lld\n",m);
    }

}

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

请添加图片描述

#include <stdio.h>
#include <math.h>

#define EARTH_RADIUS 6371// 地球半径(公里)

// 使用Haversine公式计算两个地点之间的距离(直接使用弧度)
// 将角度转换为弧度
double degreesToRadians(double degrees) {
    return degrees * M_PI/ 180.0;
}

/*double calculateHaversineDistance(double lat1, double lon1, double lat2, double lon2) {
    double dlat = lat2 - lat1;
    double dlon = lon2 - lon1;

    double a = sin(dlat/2) * sin(dlat/2) + cos(lat1) * cos(lat2) * sin(dlon/2) * sin(dlon/2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));

    return EARTH_RADIUS * c;
}*/

int main() {
    double lat1, lon1, lat2, lon2;
    

    scanf("%lf %lf", &lat1, &lon1);
    

    scanf("%lf %lf", &lat2, &lon2);
    double lat=degreesToRadians(lat2-lat1);

    double lon=degreesToRadians(lon2-lon1);
    lat1=degreesToRadians(lat1);
    lat2=degreesToRadians(lat2);

    
    double havlat=sin(lat/2)*sin(lat/2);
    //havlat=round(havlat*10000.0)/10000.0;
    double havlon=sin(lon/2)*sin(lon/2);
    //havlon=round(havlon*10000.0)/10000.0;
    double coslat=cos(lat1)*cos(lat2);
    //coslat=round(coslat*10000.0)/10000.0;
    double havdr=havlat+coslat*havlon;
    //havdr=round(havdr*10000.0)/10000.0;
    double dr=acos(1-2*havdr);
    //dr=round(dr*10000.0)/10000.0;
    double d=dr*EARTH_RADIUS;
    d=round(d*10000.0)/10000.0;
    
   // double distance = calculateHaversineDistance(lat1, lon1, lat2, lon2);
    
    printf("%.4lfkm\n", d);
    
    return 0;
}

/*
34.260958 108.942369
55.755825 37.617298


*/

9.风寒指数

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <math.h>

int main(){
    double v,t;
    scanf("%lf %lf",&v,&t);
    double result=13.12+0.6215*t-11.37*pow(v,0.16)+0.3965*t*pow(v,0.16);
    printf("%.0lf",result);
}

10.颜色模型转变

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    double H,S,V,MIN,MAX;
    double R,G,B;
    scanf("%lf %lf %lf", &R, &G, &B);
    R=R*100.000000;G=G*100.000000;B=B*100.000000;
    V=fmax(R,G);
    V=fmax(V,B);
    MAX=V;
    V=MAX/255.0000000;
    MIN=fmin(R,G);
    MIN=fmin(MIN,B);
    if(V==0){
        S=0;
    }
    else{
        S=100.00000000*(MAX-MIN)/MAX;
    }



    if(MAX==R){
        H=0+60.0000000*((G-B)/(MAX-MIN));
    }
    else if(MAX==G){
        H=120.000000+60.0000000*((B-R)/(MAX-MIN));
    }
    else if(MAX==B){
        H=240.0000000+60.000000*((R-G)/(MAX-MIN));
    }
    
    if(H<0){
        H=H+360.000000;
    }

 
     printf("%.4lf,%.4lf%%,%.4lf%%\n", round(H * 10000.0) / 10000.0, round(S * 10000.0) / 10000.0, round(V * 10000.0) / 10000.0);
}

11-20

11.倍数和

请添加图片描述

#include <stdio.h>


long long solve(long long n){
    long long result =0;
    for(int i=1; i<n; i++){
        if(i%3==0||i%5==0){
            result+=i;
        }
    }
    return result;
}


long long sum_of_multiples(long long n) {
    n--;  
    long long sum3 = (n / 3) * (3 + (n / 3) * 3) / 2;
    long long sum5 = (n / 5) * (5 + (n / 5) * 5) / 2;
    long long sum15 = (n / 15) * (15 + (n / 15) * 15) / 2;
    return sum3 + sum5 - sum15;
}


int main(){
    long long  T,n;
    scanf("%lld",&T);
    int arr[100000];

    for(long long i=0;i<T;i++){
        scanf("%lld",&n);
        //printf("%lld\n",solve(n));
        //printf("%lld\n",sum_of_multiples(n));
        arr[i]=sum_of_multiples(n);
    }
    for(long long i=0;i<T;i++){

        printf("%lld\n",arr[i]);
    }
}

12.分数的加、减、乘、除法

请添加图片描述

#include <stdio.h>
#include <string.h>

//求最大公约数
int gcd(int x,int y){
    if(y==0){
        return x;
    }
    return gcd(y,x%y);

}


int main(){
    
    int a1,a2,b1,b2;
    int result1,result2,common_divisor;
    scanf("%d/%d",&a1,&a2);
    scanf("%d/%d",&b1,&b2);

    //加法
    result1=a1*b2+a2*b1;
    result2=a2*b2;
    common_divisor=gcd(result1,result2);
    result1/=common_divisor;
    result2/=common_divisor;
    printf("(%d/%d)+(%d/%d)=%d/%d\n",a1,a2,b1,b2,result1,result2);

    //减法
    result1=a1*b2-a2*b1;
    result2=a2*b2;
    common_divisor=gcd(result1,result2);
    result1/=common_divisor;
    result2/=common_divisor;
    printf("(%d/%d)-(%d/%d)=%d/%d\n",a1,a2,b1,b2,result1,result2);

    //乘法
    result1=a1*b1;
    result2=a2*b2;
    common_divisor=gcd(result1,result2);
    result1/=common_divisor;
    result2/=common_divisor;
    printf("(%d/%d)*(%d/%d)=%d/%d\n",a1,a2,b1,b2,result1,result2);

    //除法
    result1=a1*b2;
    result2=a2*b1;
    common_divisor=gcd(result1,result2);
    result1/=common_divisor;
    result2/=common_divisor;
    printf("(%d/%d)/(%d/%d)=%d/%d\n",a1,a2,b1,b2,result1,result2);


    return 0;

}

13.乘数模

请添加图片描述

#include <stdio.h>

int main(){
    long long a,b,m;
    scanf("%lld %lld %lld", &a, &b, &m);
    long long result;
    result = (a%m)*(b%m)%m;
    printf("%lld\n", result);


}

14.对称数

请添加图片描述

#include <stdio.h>



char str[1000]="0";
int len=0;

int judge(int i){
    if(str[i]=='1'&&str[len-i-1]=='1'){
        return 1;
    }
    else if(str[i]=='9'&&str[len-i-1]=='6'){
        return 1;
    }
    else if(str[i]=='6'&&str[len-i-1]=='9'){
        return 1;
    }
    return 0;
}


int main(){
    
    char ch;
    while((ch = getchar()) !='\n'){
        str[len]=ch;
        len++;
    }
    int flag=1;
    //printf("%s\n",str);

    if(len==1){
        if(str[0]=='1')
        flag=1;
    }
    else{
        for(int j=0;j<len;j++){
            //printf("%d\n",judge(j));
            if(judge(j)==0){
                //printf("%d\n",judge(j));
                flag=0;
                break;
            }
        
        }
    }

    if(flag==0){
        printf("No\n");
    }
    else{
        printf("Yes\n");
    }

    return 0;
   
   
}

15.比率

请添加图片描述

#include <stdio.h>

//求最大公约数
long long  gcd(long long  x,long long  y){
    if(y==0){
        return x;
    }
    return gcd(y,x%y);

}


int main(){
    
    double n;
    scanf("%lf",&n);
    n=n*100000000000;
    long long x=(long long )n;
    long long  common_divisor=gcd(100000000000,x);
    long long  a=x/common_divisor;
    long long  b=100000000000/common_divisor;
    printf("%lld/%lld",a,b);
    return 0;
    }

16.操作数

请添加图片描述

#include <stdio.h>


long long solve(long long n){
    long long result = 0;
    while(n>0){
        result = result + n%10;
        n=n/10;
    }
    return result;
}

int main(){
  long long  n;
  scanf("%lld", &n);
  long long  num=0;
  while(n>0){
    n=n-solve(n);
    num++;
  }
  printf("%lld\n", num);

}

17.级数和

请添加图片描述

#include <stdio.h>

int main() {
    int n;
    double sum = 1.2;
    scanf("%d", &n);
    printf("1.2");
    for (int i = 2; i <= n; i++) {
        if((i+1)%10==0)
        {
            printf("+%d.%d", i, (i+1)/10);
        }
        else{
            printf("+%d.%d", i, i + 1);
        }
        
        if(i>=9){
            sum+=i+((double)(i+1))/100.0;
        }
        else{
            sum+=i+((double)(i+1))/10.0;
        }
       
    }
    printf("=%.2lf\n", sum);


    return 0;
}

18.组合数

请添加图片描述

#include <stdio.h>

int main(){
    int n;
    int sum=0;
    scanf("%d",&n);
    for(int i=0;i<=9;i++)
        for(int j=0;j<=9;j++) 
            for(int k=0;k<=9;k++)
               for(int x=0;x<=9;x++){
                   if(i+j+k+x==n){
                        sum++;
                   }
            }
    printf("%d",sum);
}

19.幂数模

请添加图片描述

#include <stdio.h>

int main(){
    long long a,b,m;
    scanf("%lld %lld %lld", &a, &b, &m);
    long long result=1;
    while(b!=0){
        if(b%2){
            result=(result*a)%m;
        }
        a=(a*a)%m;
        b=b/2;
    }
    printf("%lld\n", result);

}

20.方阵

请添加图片描述

#include <stdio.h>

int main(){
    long long n,k,j;
    scanf("%lld",&n);
    if(n==0){
        printf("0\n");
    }
    else{
    for(long long i=0;i<n;i++){
        for(k=i;k>0;k--){
            printf("%lld ",k);
        }

        for(j=0;j<n-i-1;j++){
            printf("%lld ",j);
        }
        printf("%lld\n",j);

    }
    }
    return 0;
    
}

21-30

21.毕达哥拉斯三元组

请添加图片描述

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<n;i++)
        for(int j=i+1;j<n;j++){
            int k=n-i-j;
            if(i*i+j*j==k*k){
                printf("%d\n",i*j*k);
            }
    }
            
}

22.倒水

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <math.h>
#define MAX 101

int m,n,d;
int min_steps=-1;
int used[MAX][MAX]={0};

void dfs(int x,int y,int steps){
    
    //若找到符合条件,则进行比较,找最小操作数
    if(x==d||y==d){
        if(steps <min_steps||min_steps==-1)
            min_steps=steps;  

        return;
    }
    //避免无限深搜,用数组标记搜索过的样例
    if(used[x][y]==1){
        return;
    }

    used[x][y]=1;

    //倒空一个杯子
    dfs(0,y,steps+1);
    dfs(x,0,steps+1);

    //装满一个杯子
    dfs(m,y,steps+1);
    dfs(x,n,steps+1);

    //把水从x倒入y里
    int sum=x+y;
    int x_next,y_next;
    if(sum>n){
        x_next=sum-n;
        y_next=n;
    }
    else{
        x_next=0;
        y_next=sum;
    }
    dfs(x_next,y_next,steps+1);

    //把水从y倒入x里
    if(sum>m){
        x_next=m;
        y_next=sum-m;
    }
    else{
        x_next=sum;
        y_next=0;
    }
    dfs(x_next,y_next,steps+1);

    used[x][y]=0;

}

int main(){

    scanf("%d %d %d",&m,&n,&d);
    dfs(0,0,0);
    printf("%d\n",min_steps);


}

俄罗斯农夫乘法

#include <stdio.h>

int main(){
    long long  x,y;
    scanf("%lld %lld",&x,&y);
    long long  sum=0;

    while(x>0){
        
        printf("%lld %lld\n",x,y);
        if(x%2){
            sum+=y;
        }
        x=x/2;
        y=y*2;
    }
    printf("%lld",sum);


}

24.查找数列

请添加图片描述

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    int i=1;
    while(1){
        if(n-i>0){
            n=n-i;
            i++;
        }
        else{
            break;
        }
    }
    printf("%d\n",n);


}

25.阶乘倍数

请添加图片描述

#include <stdio.h>
#include <math.h>

int judge(int num){

    for(int i=2;i<sqrt(num);i++){
        if(num%i==0){
            return 1;
        }
    }
    return 0;
}


int main(){
    
    long long  k;
    scanf("%lld",&k);
    long long  sum=1;
    long long n=2;
    if(judge(k)==0&&k>20)
    {
        printf("%lld\n",k);
    }
    else{
        while(1){
            sum=sum*n;
            //printf("%lld\n",sum);
            if(sum%k==0){
                printf("%lld\n",n);
                break;
            }
            n++;
        }
    }
    return 0;

}

26.最大数字

请添加图片描述

#include <stdio.h>


int judge(int num){
    int t1=9;
    while(num>0){
        int t2=num%10;
        num/=10;
        if(t1<t2){
            return 0;
        }
        t1=t2;
    }
    return 1;

}

int main(){
    int n;
    scanf("%d",&n);
    for(int i=n;i>=0;i--){
        if(judge(i)){
            printf("%d\n",i);
            break;
        }
    }


}

27.余数和

请添加图片描述

#include <stdio.h>

int main(){
    int n,k;
    scanf("%d %d",&n,&k);
    int sum=0;
    for(int i=1;i<=n;i++){
        sum+=k%i;
    }
    printf("%d\n",sum);

}

28.方案数

请添加图片描述

#include <stdio.h>

int n;

int judge(int start){
    int sum=0;
    for(int i=start;i<n;i++){
        sum+=i;
        if(sum==n){
            return 1;
        }
        else if(sum>n){
            return 0;
        }
    }
    return 0;
}

int main(){

   int nums = 1;
   scanf("%d",&n);
   for(int i=1;i<=n/2;i++){
     nums+=judge(i);
   }
   printf("%d\n",nums);


}

29.竖式乘法

请添加图片描述
请添加图片描述

#include <stdio.h>

int count(int n){
    if(n==0){
        return 1;
    }

    int lens=0;
    while(n>0){
        n=n/10;
        lens++;
    }
    return lens;

}

int main(){
    int a,b;
    int result;
    scanf("%d %d",&a,&b);
    result = a*b;
    int len=count(result);
    len++;
    int a_len=count(a);
    int b_len=count(b);
    for(int i=0;i<len-a_len;i++){
        printf(" ");
    }
    printf("%d\n",a);
    printf("x");
    for(int i=0;i<len-b_len-1;i++){
        printf(" ");
    }
    printf("%d\n",b);
    for(int i=0;i<len;i++){
        printf("-");
    }
    printf("\n");
    for(int i=0;i<b_len;i++){
        int tmp=b%10;
        b=b/10;
        tmp=a*tmp;
        int t_len=count(tmp);
        if(i==b_len-1){
            printf("+");
            t_len+=1;
        }
        for(int j=0;j<len-i-t_len;j++){
            printf(" ");
        }
        printf("%d",tmp);
        for(int k=0;k<i;k++){
            printf(" ");
        }
        printf("\n");
    }
    for(int i=0;i<len;i++){
        printf("-");
    }
    printf("\n");
    printf(" %d",result);

}

30.好数字

请添加图片描述

#include <stdio.h>
#include <math.h>
int main(){
    long long n;
    scanf("%lld",&n);
    long long sum=1;
    long long mod=pow(10,9);
    mod+=7;
    for(long long i=0;i<n;i++){
        if(i%2==0)
            sum=(sum*5)%mod;
        else
            sum=(sum*4)%mod;
    }

    printf("%lld\n",sum);
    


}

31-40

31.素数

请添加图片描述

#include <stdio.h>
#include <math.h>


int is_prime(int n){
    if(n==2||n==3||n==5){
        return 1;
    }

    if(n%2==0||n%3==0||n%5==0||n==1){
        return 0;
    }
    
    //枚举素因子,能被整除说明不是素数。
    for(int i=5;i<=sqrt(n);i+=6){
        if(n%i==0||n%(i+2)==0){
            return 0;
        }

    }
    return 1;
}

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    int num=0;
    for(int i=a;i<=b;i++){
        if(is_prime(i)){
            num++;
        }

    }
    printf("%d\n",num);

}

32.运动会

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <math.h>



// 计算欧拉函数
int eulerTotient(int n) {
    int result=n; // 初始化结果为 n

    // 遍历从 2 到 sqrt(n) 的所有质数
    for (int i=2; i<=sqrt(n);i++) {
        // 如果 i 是 n 的因子
        if (n%i == 0) {
            // 不断除以 i,直到它不再是 n 的因子
            while (n%i == 0) {
                n/=i;
            }
            // 更新结果
            result-=result/i;
        }
    }
    // 如果 n 是一个大于 1 的质数
    if (n>1) {
        result-=result/n;
    }

    return result;
}

int main(){

    int n;
    int sum=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        sum+=eulerTotient(i);
    }
    sum=sum*2+1;
    printf("%d\n",sum);

}

33.可变参数累加

请添加图片描述

#include <stdio.h>
#include <stdarg.h>

int sum(int a,...){
    va_list args;
    va_start(args, a);

    int result = 0;
    result+=a;
    int next;
    while(next=va_arg(args, int)){
        result+=next;

    }
    return result;

}

int main(){
    int a,b,c,d,e,f;
    scanf("%d %d %d %d %d %d", &a   , &b , &c , &d , &e , &f);

    int result=sum(a,b,0)-sum(c,d,e,f,0);
    printf("%d\n", result);

}

34哈沙德数

请添加图片描述
请添加图片描述

#include <stdio.h>

int HarshadNumber(int n){
    if(n==1){
        return 0;
    }
    int t=n,s=0;
    while(t){
        s=s+t%10;
        t=t/10;
    }
    if(s && n%s==0) return n/s;

    return 0;
}

int judge(int n){
    int tmp=HarshadNumber(n);
    //printf("%d",tmp);
    if(tmp==0) return 0;
    else return 1+judge(tmp);
    
}


int main(){
    int num;
    scanf("%d", &num);
    printf("%d\n", judge(num));
}

35.冰雹序列

请添加图片描述
请添加图片描述

#include <stdio.h>

void collatz(int n){
    if(n==1){
        printf("%d",n);
        return;
    }  
    if(n%2==1){
        printf("%d ",n);
        collatz(3*n+1);
    } 
    else{
        printf("%d ",n);
        collatz(n/2);
    }
}




int main(){
    int n;
    scanf("%d",&n);
    collatz(n);

}

36.基恩数

请添加图片描述
请添加图片描述

#include <stdio.h>

int lsKeith(int N) {
    int len = 0;
    int originalN = N;
    int sequence[100]; 
    int a[100];
    int sum=0;
    while(N>0){
        sequence[len++] = N%10;
        N=N/10;
        
    }
    int index=0;
    for(int i=len-1; i>=0; i--){
        a[index++]=sequence[i];
        sum+=sequence[i];
    }
    int start=0;
    while(1){
       a[index++]=sum;
       sum=sum+sum-a[start++];
       if(sum==originalN){
            return 1;
       }
       if(sum>originalN){
            return 0;
       }
   
    }
 

    return 0; 
}

int main() {
    int N;
    scanf("%d", &N);

    if (lsKeith(N) == 1) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}

37.可变参数平均

请添加图片描述

#include <stdio.h>
#include <stdarg.h>

double avg(int n, ...) {
    va_list args;
    va_start(args, n);

    double sum = 0.0;
    for (int i = 0; i < n; i++) {
        sum += va_arg(args, double);
    }

    va_end(args);

    return sum / n;
}

int main() {
    double a, b, c, d, e;
    scanf("%lf %lf %lf %lf %lf", &a, &b, &c, &d, &e);

    double result = avg(2, a, b) - avg(3, c, d, e);
    
    printf("%.4lf\n", result);

    return 0;
}

38.光线追踪

请添加图片描述
请添加图片描述
在洛谷找到原题,有完美的数学解法。
洛谷

下面代码就当是小丑写的

#include <stdio.h>

long long calculateTotalLength(long long  N, long long  X) {
    long long totalLength = N;
    long long N_X=N-X;//镜墙
    while(N_X>0){

        if(N_X%X==0){//镜墙的长度刚好可以让一种光长的光线反射到原点
            long long n=N_X/X;
            totalLength+=(2*n-1)*X;
            break;
        }
        else if(N_X/X>=1){//不能,则需要计算差多少,最后置换反射光长和镜墙的长度
            
            long long n=N_X/X;
            totalLength+=2*n*X;
            int tmp=N_X-X*n;
            N_X=X;
            X=tmp;
            
        }

    }
    return totalLength;
    

    
}

int main() {
    long long  N, X;
    scanf("%lld %lld", &N, &X);  
    long long totalLength;
    if(N-X>=X)
        totalLength=calculateTotalLength(N, X);
    else
        totalLength=calculateTotalLength(N, N-X);
    printf("%lld\n", totalLength);  

    return 0;
}

39.二进制表示

请添加图片描述

#include <stdio.h>


void binaryRepresentation(int n) {
    if (n == 0) {
        return;
    } else if (n == 1) {
        printf("2(0)");
    } else if (n == 2) {
        printf("2");
    } else {
        int power = 0;
        int temp = 1;
        while (temp * 2 <= n) {
            temp *= 2;
            power++;
        }
        
        if (temp == n) {
            printf("2(");
            binaryRepresentation(power);
            printf(")");
        } else {
            if(power == 1) {//括号内的单独为1的数字不需要转换为2(0)
                printf("2+");
            }
            else{
                printf("2(");
                binaryRepresentation(power);
                printf(")+");
            }
                binaryRepresentation(n - temp);

        }
    }
}

int main() {
    int n;
    scanf("%d", &n);

    binaryRepresentation(n);
    printf("\n");

    return 0;
}

40.佩尔数

请添加图片描述
请添加图片描述

#include <stdio.h>

int PB(int n){
    int p0=0,p1=1,pn,i;
    for(i=0;i<=n;i++)
        if(i==0) pn=p0;
        else if(i==1) pn=p1;
        else{
            pn=2*p1+p0;
            p0=p1;
            p1=pn;
        }
    return pn;
}

int PA(int n){
    if(n==0) return 0;
    else if(n==1) return 1;
    if(n%2){
        return  2*PB(n-1)+PA(n-2);
    }
    else{
        return 2*PA(n-1)+PB(n-2);
    }
}



int  pell(int n){
    if(n%2)
        return PA(n);
    else
        return PB(n);
}

int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",pell(n));
}

41-50

41.【专业融合:管理】货运优化

请添加图片描述

请添加图片描述

#include <stdio.h>

int main(){
   int a[7];
   int a_3[4]={0,5,3,1};
   while(1){
        scanf("%d %d %d %d %d %d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
        if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0&&a[5]==0&&a[6]==0){
            break;
        }
        int sum=0;
        sum+=a[6];
        sum+=a[5];
        sum+=a[4];
        int sub=a[2]-a[4]*5;
  
        sum+=a[3]/4;
        if(a[3]%4){
            sum++;
        }
        int x=a_3[a[3]%4];
        if(sub>=0){
            if(a[2]-sub>x){
                sum+=(a[2]-sub-x)/9;
                if((a[2]-sub-x)%9){
                    sum++;
                }
            }
        }
        x=36*sum-(a[3]*9+a[2]*4+a[4]*16+a[5]*25+a[6]*36);
        if(a[1]>x){
            sum+=(a[1]-x)/36;
            if((a[1]-x)%36){
                sum++;
            }
        } 
        printf("%d\n",sum);
   }
   return 0;


}



/*
1 1 1 1 1 1
2 2 2 2 2 2
1 2 3 4 5 6
0 0 0 0 0 0 
*/

42.完美矩阵

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <math.h>

int a[300][300];
int counts=0;

int is_perfect(int x1, int y1, int x2, int y2){
    int zeros=0,ones=0;
    for(int i=x1;i<=x2;i++)
        for(int j=y1;j<=y2;j++){
            if(i==x1||i==x2||j==y1||j==y2){
                if(a[i][j]!=1){
                    return 0;
                }
            }
            else{
                if(a[i][j]==0){
                    zeros++;
                }
                else{
                    ones++;
                }
            }
        }
    
    if(abs(zeros-ones)<=1){
        return 1;
    }
    else{
        return 0;
    }

}

void sums(int n,int m){
    int MIN=fmin(n,m);
    for(int k=MIN;k>1;k--){
        for(int i=0;i<n-k+1;i++)
            for(int j=0;j<m-k+1;j++){
                if(k==2){
                    int x1=i,x2=i+k-1,y1=j,y2=j+k-1;
                    if(a[x1][y1]==1&&a[x1][y2]==1&&a[x2][y1]==1&&a[x2][y2]==1){
                        counts++;
                    }
                }
                else if(is_perfect(i,j,i+k-1,j+k-1)){
                    counts++;
                }
            }

    }


}

int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    sums(n,m);
    printf("%d\n",counts);

    return 0;

}

/*
4 4
1 1 1 1
1 0 1 1 
1 1 0 1
1 1 1 1

这道题的描述有问题,只用判定方阵即可,不需要严格到矩阵。

43.【专业融合:航空】飞机起飞速度(没有AC)

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
43还没有AC

44.【专业融合:物理】蒙特卡罗方法求积分

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>
#include <stdlib.h>
#include <math.h>



int main(){
    int m,N;
    double a,b;
    scanf("%d %lf %lf %d",&m,&a,&b,&N);
    srand(RAND_MAX);
    double sum=0;
    double result;
    if(m==1){
        for(int i=0;i<1999;i++){
            double randomValue=a + ((double)rand() / RAND_MAX) * (b - a);
            double x1=pow(randomValue,4);
            double x2=exp(-randomValue);
            sum+=x1*x2;
        }
        result=(b-a)*sum/N;
    }
    else if(m==2){
        for(int i=0;i<1999;i++){
            double randomValue=a + ((double)rand() / RAND_MAX) * (b - a);
            sum+=pow(randomValue,2)+1;
        }
        result=(b-a)*sum/N;
    }
    else if(m==3){
        for(int i=0;i<1999;i++){
            double randomValue=a + ((double)rand() / RAND_MAX) * (b - a);
            sum+=cos(randomValue);
        }
        result=(b-a)*sum/N;
    }
    else if(m==4){
         for(int i=0;i<1999;i++){
            double randomValue=a + ((double)rand() / RAND_MAX) * (b - a);
            sum+=pow(randomValue,0.5)*(randomValue-2);
        }
        result=(b-a)*sum/N;

    }
    else if(m==5){
         for(int i=0;i<1999;i++){
            double randomValue=a + ((double)rand() / RAND_MAX) * (b - a);
            sum+=2*sin(randomValue)-5*cos(randomValue);
        }
        result=(b-a)*sum/N;
    }

    printf("%.6lf\n", result);


}



现在1999的位置上本来是N,搜到一个评论说只要样本为1999就能AC,结果还真行,无语了。

45.素数筛选法

请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>
#define N 10000000
int vis[N+1]={0};
int pr[N+1];//存质数
int cnt=0;

void Euler_sieve(int n)
{
    int i,j;
    for(i=2;i<=n;i++){
        if(vis[i]==0){
            pr[cnt++]=i;
        }
        for(j=0;j<cnt;j++){
            if(i*pr[j]>n)//超出范围停止
                    break;
            vis[i*pr[j]]=1;
            if(i%pr[j]==0)//找到最小质因子后停止搜索
                    break;
        }
    }
}
    

int main(){
    int n;
    scanf("%d",&n);
    Euler_sieve(n);
    printf("%d\n",cnt);
    /*for(int i=0;i<cnt;i++){
        printf("%d\n",pr[i]);
    }*/
    return 0;
}

46.【专业融合:计算机】波士顿房价预测

请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>

//最小二乘法
struct point{
    int x;
    int y;
};

int main(){
    int n;
    scanf("%d",&n);
    struct point arr[n];
    double sum_x=0,sum_y=0;
    for(int i=0; i<n; i++){
        scanf("%d %d",&arr[i].x,&arr[i].y);
        sum_x+=arr[i].x;
        sum_y+=arr[i].y;
    }
    double x_m=sum_x/n;
    double y_m=sum_y/n;
    double a=0,b=0;
    double tmp1,tmp2;
    for(int i=0; i<n; i++){
        tmp1+=(arr[i].x-x_m)*(arr[i].y-y_m);
        tmp2+=(arr[i].x-x_m)*(arr[i].x-x_m);

    }
    b=tmp1/tmp2;
    a=y_m-b*x_m;
    printf("Y=%.4lf+%.4lf*X",a,b);


}

/*
7
150 6450
200 7450
250 8445
300 9450
350 11450
400 15450
600 18450
*/

47.稀疏矩阵

请添加图片描述

#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int matrix[n][m];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    int non_zero_count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (matrix[i][j] != 0) {
                non_zero_count++;
            }
        }
    }

    if (non_zero_count <= 0.05 * n * m || non_zero_count == n || non_zero_count == m) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}


/*
4 4
5 0 0 0
0 8 0 0
0 0 3 0
0 6 0 0
*/

48.回文数之和

请添加图片描述

#include <stdio.h>


int is_palindrome(int num){
    int source=num;
    int result=0;
    while(num>0){
        result=result*10+num%10;
        num=num/10;
    }
    if(source==result) return 1;
    return 0;
}

int convert(int num,int k){
    int result=0;
    int base=1;
    while(num>0){
        result=result+(num%k)*base;
        num=num/k;
        base*=10;
    }
    return result;
}

int main() {
    int n,k;
    scanf("%d %d",&n,&k);
    int sum=0;
    for(int i=1;i<n;i++){
        if(is_palindrome(i)&&is_palindrome(convert(i,k)))
            sum+=i; 
    }
    printf("%d\n",sum);


    return 0;
}

49.【专业融合:数学】行列式值

请添加图片描述
请添加图片描述

#include <stdio.h>

int laplace(int a[100][100],int r,int c,int n);
int determinant(int a[100][100],int n);




int main(){
    int n;
    int a[100][100];
    int result;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            scanf("%d",&a[i][j]);
    
    result=determinant(a,n);
    printf("%d\n",result);
    return 0;
    

}

int determinant(int a[100][100],int n){
    int result=0;
    int tmp=1;
    int subset;

    if(n==1){
        result=a[0][0];
    }
    else{
        for(int i=0;i<n;i++){
            subset=laplace(a,i,0,n);
            result+=a[i][0]*tmp*subset;
            tmp*=-1;
        }
    }
    return result;
}
int laplace(int a[100][100],int r,int c,int n){
    int result=0;
    int subset[100][100];
    int s_i,s_j;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++){
            s_i=i;
            s_j=j;
            if(i!=r&&j!=c){
                if(i>r) i--;
                if(j>c) j--;
                subset[i][j] = a[s_i][s_j];
                i=s_i;
                j=s_j;
            }
        }
    
    if(n>=2){
        result=determinant(subset,n-1);
    }
    return result;
}

/*
3
2 6 3
1 0 2
5 8 4
*/

50.【专业融合:管理】航空旅行

请添加图片描述

#include <stdio.h>


int main(){
    int n;
    scanf("%d",&n);
    int a[3];
    int d,e;
    for(int i=0;i<n;i++){
        int flag=0;
        scanf("%d %d %d %d %d",&a[0],&a[1],&a[2],&d,&e);
        for(int j=0;j<2;j++)
            for(int k=0;k<2-j;k++){
                if(a[k]>a[k+1])
                {
                    int tmp=a[k];
                    a[k]=a[k+1];
                    a[k+1]=tmp;
                }
        }
        if(a[2]+a[1]<=d&&a[0]<=e){
                flag=1;
        }
        if(flag) printf("YES\n");
        else printf("NO\n");

    }

}

/*
3
1 1 1 15 5
8 7 6 15 5
8 5 7 15 6
*/

51-60(一看到字符串就摆烂用C艹来写了,以后有时间再更新C的写法)

51删除前后缀

请添加图片描述

#include <bits/stdc++.h>

using namespace std;



void str_removeprefix(string str,string words){
    while(str.compare(0,words.length(),words)==0&&str.length()>=words.length()){
        str.erase(0,words.length());
    } 
    cout << str << endl;   

}

void str_removesuffix(string str,string words){
    while(str.compare(str.length()-words.length(),words.length(),words)==0&&str.length()>=words.length()){
        str.erase(str.length()-words.length());
    }
    cout << str << endl;
}

int main(){
    string str,words;
    getline(cin,str);
    getline(cin,words);
    str_removeprefix(str,words);
    str_removesuffix(str,words);

}

/*
antiantianwartiantianti
anti
*/

52Atol转换

请添加图片描述

#include <bits/stdc++.h>

using namespace std;

int Atol(string str){
    long long res=0;
    int len = str.length();
    int sign = 1;
    int i=0;

    while(str[i]==' '){
        i++;
    }


    if(str[i]=='+'){
        sign=1;
        i++;
    }
    else if(str[i]=='-'){
        sign=-1;
        i++;
    }


    while(str[i]>='0' && str[i]<='9'){
        res=res*10+(str[i]-'0');
        if(res*sign>INT_MAX) return INT_MAX;
        if(res*sign<INT_MIN) return INT_MIN;
        i++;
    }

    return res*sign;


}

int main(){
    string str;
    getline(cin,str);
    cout<<Atol(str)<<endl;

}

/*
-123x+123
*/

53前后缀移除

请添加图片描述

#include <bits/stdc++.h>
using namespace std;


void str_lstrip(string& str, string& chars) {
    int pos = str.find_first_not_of(chars);
    if (pos != string::npos) {
        str.erase(0, pos);
    }
    
}


void str_rstrip(string& str, string& chars) {
    int pos = str.find_last_not_of(chars);
    if (pos != string::npos) {
        str.erase(pos + 1);
    } 
}


void str_strip(string& str, string& chars) {
    str_lstrip(str, chars);
    str_rstrip(str, chars);
}

int main() {
    string str;
    string chars;
    string tmp;
    getline(cin, str);
    tmp=str;
    getline(cin, chars);
    
    str_lstrip(str, chars);
    cout << str << endl;
    str=tmp;

    str_rstrip(str, chars);
    cout << str << endl;
    str=tmp;
    
    str_strip(str, chars);
    cout << str << endl;

    
    return 0;
}

/*
www.example.com
cmowz.
*/

54大小写交换

#include <bits/stdc++.h>

using namespace std;

void str_swapcase(string &str){
    for(int i=0; i<str.length();i++){
        if(str[i]>='A'&&str[i]<='Z'){
            str[i]+='a'-'A';
        }
        else if(str[i]>='a'&&str[i]<='z'){
            str[i]-='a'-'A';
        }
    }
}

int main(){
    string str;
    getline(cin, str);
    str_swapcase(str);
    cout << str <<endl;
}

/*
Hello world
*/

55字符串后缀

请添加图片描述

#include <bits/stdc++.h>

using namespace std;

int str_endswith(string str,string suffix){
    if(str.length()<suffix.length()) return 0;
    int len=str.length()-suffix.length();
    str.erase(0,len);
    if(str==suffix)
        return 1;

    return 0;

}


int main(){
    string str,suffix;
    getline(cin, str);
    getline(cin, suffix);
    if(str_endswith(str, suffix))
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    

}

/*
hello world!
world!
*/

56Kids A+B

请添加图片描述
请添加图片描述

#include <bits/stdc++.h>

using namespace std;

map<string, int> numberMap = {
    {"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4},
    {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9},
    {"ten", 10}, {"eleven", 11}, {"twelve", 12}, {"thirteen", 13},
    {"fourteen", 14}, {"fifteen", 15}, {"sixteen", 16}, {"seventeen", 17},
    {"eighteen", 18}, {"nineteen", 19}, {"twenty", 20}, {"thirty", 30},
    {"forty", 40}, {"fifty", 50}, {"sixty", 60}, {"seventy", 70},
    {"eighty", 80}, {"ninety", 90}
};

map<int,string> enmap={
    {0,"zero"},{1,"one"},{2,"two"},{3,"three"},
    {4,"four"},{5,"five"},{6,"six"},{7,"seven"},
    {8,"eight"},{9,"nine"},{10,"ten"},{11,"eleven"},
    {12,"twelve"},{13,"thirteen"},{14,"fourteen"},{15,"fifteen"},
    {16,"sixteen"},{17,"seventeen"},{18,"eighteen"},{19,"nineteen"},
    {20,"twenty"},{30,"thirty"},{40,"forty"},{50,"fifty"},{60,"sixty"},
    {70,"seventy"},{80,"eighty"},{90,"ninety"}
};

int convert(string a){
    int num;
    int pos=a.find('-');
    if(pos!=-1){
        string x=a.substr(0,pos);
        string y=a.substr(pos+1);
        num=numberMap[x]+numberMap[y];
    }
    else{
        num=numberMap[a];
    }
    return num;
}

void convert_E(int a){
    //cout<<"a:"<<a<<endl;
    int x=a/10;
    int y=a%10;
    //cout<<x<<" "<<y<<endl;
    if(x>1&&y)
        cout<<enmap[x*10]<<"-"<<enmap[y]<<endl;
    else if(x>=1)
        cout<<enmap[a]<<endl;
    else
        cout<<enmap[y]<<endl;
}

int main(){
    string a,b;
    int num_a,num_b;
    cin>>a>>b;
    num_a=convert(a);
    num_b=convert(b);
    int res=num_a+num_b;
    convert_E(res);
    
    
}

/*
twenty-seven fifty-four
*/

57字符串替换(WA)

请添加图片描述

#include <bits/stdc++.h>

using namespace std;

void str_replace(string str,string olds,string news){
    string res="";
    
    while(1){
        int pos=str.find(olds);
        if(pos==-1){
            res+=str;
            break;
        }
        else{
            res=res+str.substr(0,pos)+news;
            str=str.substr(pos+olds.length());
             
        }
    }
    cout<<res<<endl;

}

int main(){
    string str,olds,news;
    getline(cin,str);
    getline(cin,olds);
    getline(cin,news);
    str_replace(str,olds,news);
    
}

/*
xx is the best,xx for xxer
xx
nwpu
*/

58字符串切片

请添加图片描述
请添加图片描述
请添加图片描述

#include <bits/stdc++.h>

using namespace std;

void str_slice(string src,int start,int stop,int step){
    string res="";
    if(start<0)
        start=src.length()+start;
    if(stop<0)
        stop=src.length()+stop;

    if(stop>=start)
        for (int i = start; i < stop; i += step) {
            res += src[i];
        }
    else
        for (int i = start; i > stop; i += step) {
            res += src[i];
        }
    cout<<res<<endl;

}



int main() {
    string src;
    cin >> src;

    int t;
    cin >> t;

    for (int i = 0; i < t; ++i) {
        int n;
        cin >> n;

        int start, stop, step;
        if (n == 3) {
            cin >> start >> stop >> step;
        } else if (n == 2) {
            cin >> start >> stop;
            step = 1;
        } else if (n == 1) {
            cin >> start;
            stop = src.length();
            step = 1;
        }

        str_slice(src, start, stop, step);

    }

    return 0;
}

/*
ABCDEFGHI
8
2 2 7
2 -7 -2
2 2 -5
3 2 7 2
3 6 1 -2
2 0 3
1 6
3 -1 -10 -1
*/

59元宇宙A+B

请添加图片描述

#include <bits/stdc++.h>

using namespace std;


int convert_char_to_int(char ch){
    if(ch>='0'&&ch<='9')
        return ch-'0';
    else if(ch>='A'&&ch<='Z')
        return ch-'A'+10;

}

char convert_int_to_char(int num){
    if(num>=0&&num<=9){
        return num+'0';
    }
    else if(num>=10&&num<=36){
        return num+'A'-10;
    }
}

string add(string a,string b){
    long long  num1=0,num2=0;
    for(int i=0;i<a.length();i++){
        num1=num1*36+convert_char_to_int(a[i]);
    }  
    for(int i=0;i<b.length();i++){
        num2=num2*36+convert_char_to_int(b[i]);
    }
    long long  res=num1+num2;
    string str="";
    if(res==0){
        return "0";
    }
    while(res>0){
        str+=convert_int_to_char(res%36);
        res=res/36;
    } 
    return str;
    
}

int main(){
    string a,b;
    cin>>a>>b;
    string str=add(a,b);
    for(int i=str.length()-1;i>=0;i--){
        cout<<str[i];
    }
    cout<<endl;
}

60分离字符串

请添加图片描述

#include <bits/stdc++.h>

using namespace std;



void str_split(string str,string sep){
    while(1){
        int pos=str.find(sep);
        if(pos==-1){
            cout<<str<<endl;
            break;
        }
        else{
            cout<<str.substr(0,pos)<<endl;
            str=str.substr(pos+sep.length());
        }
    }
}

int main(){
    string str,sep;
    getline(cin,str);
    getline(cin,sep);
    str_split(str,sep);

}

61-70

61【专业融合:生物】DNA双螺旋结构

请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>



void print_dna1(){
    printf("   AT   \n");
    printf("  T--A  \n");
    printf(" A----T \n");
    printf("T------A\n");
    printf("T------A\n");
    printf(" G----C \n");
    printf("  T--A  \n");
    printf("   GC   \n");
}

void print_dna2(){
    printf("   CG   \n");
    printf("  C--G  \n");
    printf(" A----T \n");
    printf("A------T\n");
    printf("T------A\n");
    printf(" A----T \n");
    printf("  A--T  \n");
    printf("   GC   \n");
}

void print_dna3(){
    printf("   AT   \n");
    printf("  C--G  \n");
    printf(" T----A \n");
    printf("C------G\n");
    printf("C------G\n");
    printf(" T----A \n");
    printf("  G--C  \n");
    printf("   AT   \n");
}



int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n/2;i++){
        if(i%3==1) print_dna1();
        else if(i%3==2) print_dna2();
        else if(i%3==0) print_dna3();
    }
    return 0;

}

62【专业融合:网安】加密字串

请添加图片描述

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    int x;
    cin>>s;
    cin>>x;
    int alphabet[26]={0};
    for(int i=0;i<s.length();i++){
        alphabet[s[i]-'a']++;
    }
    for(int i=0;i<s.length();i++){
        char tmp;
        if(alphabet[s[i]-'a']%2){
            tmp=((int)(s[i]-x-'a')%26+26)%26+'a';
        }
        else{
            tmp=((int)(s[i]+x-'a')%26+26)%26+'a';
        }
        s[i]=tmp;

    }
    cout<<s<<endl;


}

63三元搜索

请添加图片描述

请添加图片描述
请添加图片描述

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0; i<n; i++){
        scanf("%d",&a[i]);
    }
    int key;
    scanf("%d",&key);
    int left=0,right=n-1;
    int mid1,mid2;
    int result;
    while(1){
        if(key>a[right]){
            result=-1;
            break;
        }
        if(key<a[left]){
            result=-1;
            break;
        }
        mid1=left+(right-left)/3;
        mid2=right-(right-left)/3;
        if(a[mid1]==key) 
        {
            result=mid1;
            break;
        }
        if(a[mid2]==key)
        { 
            result=mid2;
            break;
        }
        if(mid1==mid2)
        {
            result=-1;
            break;
        }
        if(key<a[mid1]) right=mid1-1;
        else if(key>a[mid2]) left=mid2+1;
        else if(key>a[mid1]&&key<a[mid2]){
            left=mid1+1;
            right=mid2-1;
        }
    }
    printf("%d in [%d]",key,result);
}

/*
9
1 2 3 4 5 6 7 8 9
6
*/

64循环排序

请添加图片描述

#include <stdio.h>

int main(){
      int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0; i<n; i++){
        scanf("%d",&a[i]);
    }
    
    for(int j=0; j<n-1; j++){
        int item= a[j];
        int pos= j;

        for(int i=j+1; i<n;i++){
            if(a[i]<item) pos++;
        }

        if(pos==j) continue;
        int tmp=a[pos];
        a[pos]=item;
        item=tmp;

        while(pos!=j){
            pos=j;
            for(int k=j+1;k<n;k++){
                if (a[k] < item) {
                    pos++;
                }
            }
            
             while (item == a[pos]) {
                pos++;
            }


            int temp = a[pos];
            a[pos] = item;
            item = temp;
        }

    }
    for (int i = 0; i < n; ++i) {
        printf("%d ", a[i]);
    }
        
}
/*
8
1 8 3 9 10 10 2 4
*/

65【专业融合:自动化】PID控制

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>

typedef struct PIDController{
    double Kp,Ki,Kd;//比例、积分、微分系数
    double preError,integral;//前次误差、积分
}PIDData;//PID数据类型

void PIDInit(PIDData *pid) {
    pid->Kp = 0;
    pid->Ki = 0;
    pid->Kd = 0;
    pid->preError = 0;
    pid->integral = 0;
}

double PIDCalculate(PIDData *pid,double setpoint,double measuredValue){
    double error=setpoint-measuredValue;
    pid->integral+=error;
    double diff=error-pid->preError;
    pid->preError=error;
    double output=pid->Kp*error+pid->Ki*pid->integral+pid->Kd*diff;
    return output;

}

int main(){
    double setpoint,measuredValue;
    PIDData pid;
    int n;
    PIDInit(&pid);
    scanf("%lf %lf %lf",&pid.Kp,&pid.Ki,&pid.Kd);
    scanf("%lf %lf",&setpoint,&measuredValue);
    scanf("%d",&n);
    for(int i=1; i<=n;i++){
        double output=PIDCalculate(&pid,setpoint,measuredValue);
        //这里本应该打印ouput变量才对,但是noj上的输出是measuredValue
        measuredValue+=output;
        printf("%d %.6lf\n",i,measuredValue);
    }


}

/*
0.1 0.01 0.05
100 0
100
*/

66有效表达式

请添加图片描述

#include <stdio.h>

int n;
int sum=0;
int flag1=0,flag2=0;
void solve(int x){
    if(x==2*n){
        sum++;
        return ;
    }
    else{
        if(flag1+1<=n) 
        {   flag1++;
            solve(x+1);
            flag1--;
        }
        if(flag1-flag2>0&&flag2+1<=n) 
        {
            flag2++;
            solve(x+1);
            flag2--;
        }
    }


}

int main(){
    scanf("%d",&n);
    flag1=1;
    solve(1);
    printf("%d\n",sum);

}

67专业融合:电子Arduino显示

请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>

int a[10]={6,2,5,5,4,5,6,3,7,6};

int convert(int x){
    int res=0;
    if(x==0) return a[x];
    while(x){
        res+=a[x%10];
        x=x/10;
    }
    return res;
}

int calculate(int n){
    n=n-4;
    int sum=0;
    for(int i=0; i<=2000;i++)
        for(int j=0;j<=2000;j++){
            int m=i+j;
 
            if(convert(i)+convert(j)+convert(m)==n) {
                //printf("%d+%d=%d\n",i,j,m);
                sum++;
            }
        }
    return sum;
}

int main(){
    int n;
    scanf("%d", &n);
    printf("%d\n", calculate(n));
}

68【专业融合:建筑】长安

请添加图片描述
请添加图片描述
请添加图片描述

#include <stdio.h>
int bx,by,px,py;
int sum=0;
int next[2][2]={{0,1},{1,0}};
void calculate(int x,int y){
    //printf("x: %d y: %d\n",x,y);
    if(x==bx&&y==by){
        sum++;
        return ;
    }
    else{
        for(int i=0;i<2;i++){
            int x1=x+next[i][0];
            int y1=y+next[i][1];
            if((x1==px&&y1==py)||x1>bx||y1>by){
                continue;
            }
            calculate(x1,y1);
        }
    }
    
    
}

int main(){
    while(scanf("%d %d %d %d",&bx,&by,&px,&py)){
        if(bx==0&&by==0&&px==0&&py==0){
            break;
        }
        sum=0;
        //初始坐标需要选择(1,1)
        calculate(1,1);
        printf("%d\n",sum);
    }

}

/*
8 6 5 3
8 6 8 6
8 6 9 6
0 0 0 0

*/

69时钟A-B

请添加图片描述
请添加图片描述

#include <stdio.h>
#include <time.h>

int main() {

    int yearA, monthA, dayA;
    scanf("%d %d %d", &yearA, &monthA, &dayA);

    int yearB, monthB, dayB;
    scanf("%d %d %d", &yearB, &monthB, &dayB);

    // 构建tm结构体表示A和B的日期时间
    struct tm timeA = {0};
    struct tm timeB = {0};

    timeA.tm_year = yearA - 1900; 
    timeA.tm_mon = monthA - 1;    
    timeA.tm_mday = dayA;

    timeB.tm_year = yearB - 1900;
    timeB.tm_mon = monthB - 1;
    timeB.tm_mday = dayB;

 
    time_t timestampA = mktime(&timeA);
    time_t timestampB = mktime(&timeB);

 
    double difference = difftime(timestampA, timestampB);


    printf("%.6lf\n", difference);

    return 0;
}


/*
2021 1 2
2021 1 1
*/

70【专业融合:通信】GPS通讯协议

NMEA-0183是一种组合电气和数据规范 (https://en.wikipedia.org/wiki/NMEA_0183),
用于海洋电子设备 (例如回声测深
仪、声纳、风速计、陀螺罗盘、自动驾驶仪、GPS 接收器和许多其他类型的仪器)之间的通信。GPS接收机根据NMEA-0183协议
的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。
NMEA-0183协议定义的语句非常多,但是常用的只有GPGGA、GPGSA、GPGSV、GPRMC、GPVTG、GPGLL等。其中
GPRMC语句的格式如下,GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A50
整条语句是一个文本行,行中以逗号隔开各个字段,每个字段的大小(长度)不一
(1) 字段0:
GPRMC,语句ID,表明该语为RecommendedMinimumSpecificGPS/TRANSITData,含义是推荐最小定位信息。
(2)字段1:UTC时间,hhmmss.sss格式
(3)字段2: 状态,A=定位,V=未定位
(4)字段3,纬度ddmm.mmmm,度分格式(前导位数不足则补0)
(5)字段4:纬度N(北纬)或S(南纬)
(6)字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
(7)字段6:经度E(东经)或W(西经)
(8)字段7:速度,节,Knots
(9)字段8:方位角,度
(10)字段9:UTC日期,DDMMYY格式
(11)字段10:磁偏角,(000-180)度(前导位数不足则补0)
(12)字段11:磁偏角方向,E=东W=西(13)
(13)字段16:校验值这里,*为校验识别符,其后面两位数为校验和,代表"$“和”*"之间所有字符(不包括这两个字符)的异或值的十六进制值,如上面这条例句的校验和是十六进制的50。
C语言^运算符的作用是异或。
将“$”和“*”之间所有的字符做运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,
应该和
后面的两个十六进制数字的值相等,否则的话说明这条语句在传输中发生了错误。注意这个十六进制值字母是大写的。
程序的功能是读入一系列的GPS语句,其中包合GPRMC,也包含其他语句,最后一行总是END。
程序仅处理GPRMC语句,计算校验和,找出校验正确的语句,提取字段2的UTC时间,换算成北京时间 (+8小时)输出,小数点忽略。如果是校验错误的语句,输出erTor。如果不是GPRMC语句,什么也不做。

Input
输入若干行GPS语句字符串,直到“END”为止。
Output
依据前述要求输出相应结果。样例解释如下
第1行,GPRMC语句,从到之间的异或值十六进制为50,与末尾校验值相等,为有效的
GPRMC语句。UTC时间为\02小时48分13.640秒//,换算成北京时间为10:48 :13(输出结果)第2行,不是GPRMC语句,什
么也不做。
第3行,GPRMC语句,从到
之间的异或值十六进制为53,与末尾校验值不相等,输出error
第4行,不是GPRMC语句,什么也不做。第5行,GPRMC语句,从
到* 之间的异或值十六进制为48,与末尾校验值相等,为有效的GPRMC语句。UTC时间为“11小时17分24.681秒”,换算成北京时
间为19:17:24 (输出结果)
第6行,不是GPRMC语句,什么也不做。
第7行,END,结束。
Sample Input
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A50
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30
70
$GPRMC,194548.127,A,5230.657,N,01325.713,E,3968.7,122.8,200220,000.0,W44
$GPGGA,092750.000,5321.6802,N,00630.3372,w,1,8,1.03,61.7,M,55.2,M,76
$GPRMC,111724.681,A,5231.801,N,01329.267,E,1289.3,000.0,291123,000.0,W
48
$GNVTG,112.99,T,109.99,M,0.15,N,0.08,K,A
3B
END

Sample Output
10:48:13
error
19:17:24

#include <bits/stdc++.h>

using namespace std;

string out[100];
int k=0;

int check(string str){
    int i,result;

    for(result=str[1],i=2;str[i]!='*';i++)
    {
        result^=str[i];
    }
    return result;
}

int convert(string str){
    int res=0;
    res=stoi(str,0,16);
    //cout<<res<<endl;
    return res;
}


void convert_BeingTime(string utcTime){
    int  hour=stoi(utcTime.substr(0,2));
    int  B_hour=(hour+8)%24;
    if(B_hour/10==0)
        out[k++]="0"+to_string(B_hour)+":"+utcTime.substr(2,2)+":"+utcTime.substr(4,2);
    else
        out[k++]=to_string(B_hour)+":"+utcTime.substr(2,2)+":"+utcTime.substr(4,2);

}

int main(){
    string str;
    while(cin>>str){
        if(str=="END") break;
        if(str.compare(0,6,"$GPRMC")==0){
            size_t asteriskPos = str.find('*');
            if(asteriskPos!=string::npos){
                int checksum=check(str);
                
                int senchecksum=convert(str.substr(asteriskPos + 1, 2));
                if(checksum!=senchecksum) {
                    out[k++]="error";
          
                }
                else{
                    // 提取UTC时间字段
                    string utcTime = str.substr(7, 6);
     
                    convert_BeingTime(utcTime);
                }
            }
        }

    }
    for(int i=0;i<k;i++){
        cout<<out[i]<<endl;
    }
}

/*
$GPRMC,014813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPRMC,194548.127,A,5230.657,N,01325.713,E,3968.7,122.8,200220,000.0,W*44
$GPGGA,092750.000,5321.6802,N,00630.3372,w,1,8,1.03,61.7,M,55.2,M,,*76
$GPRMC,111724.681,A,5231.801,N,01329.267,E,1289.3,000.0,291123,000.0,W*48
$GNVTG,112.99,T,109.99,M,0.15,N,0.08,K,A*3B
END
*/

70-80

71【专业融合:材料】晶体密度

转自 pastebin

#include <bits/stdc++.h>
#include <cmath>
#include <math.h>


using namespace std;

struct Atom{
    string name;
    double mass;
    double APF;//原子堆积因子
    double r;//原子半径 
};

Atom elemList[] =
{
    { "Po",   208.998, 0.52360, 1.68 },
    { "Li",     6.941, 0.68017, 1.52 },
    { "Na", 22.989770, 0.68017, 1.86 },
    { "Cr",   51.9961, 0.68017, 1.28 },
    { "Mn", 54.938049, 0.68017, 1.27 },
    { "Fe",    55.845, 0.68017, 1.26 },
    { "Mo",     95.94, 0.68017, 1.39 },
    { "Ta",  180.9749, 0.68017, 1.46 },
    { "Al", 26.981538, 0.74048, 1.43 },
    { "Ca",    40.078, 0.74048, 1.97 },
    { "Ni",   58.6934, 0.74048, 1.24 },
    { "Cu",    63.546, 0.74048, 1.28 },
    { "Ge",     72.64, 0.74048, 1.22 },
    { "Ag",  107.8682, 0.74048, 1.44 },
    { "Pt",   195.078, 0.74048, 1.39 },
    { "Au", 196.96655, 0.74048, 1.44 },
    { "Pb",     207.2, 0.74048, 1.75 }
};

int main(){
    int n;
    cin>>n;
    string atoms;
    for(int i=0; i<n; i++){
        cin >> atoms;
        for(int j=0;j<17;j++){
            if(elemList[j].name==atoms){
                double V=4.0/3.0*M_PI*pow(elemList[j].r,3);
                double density=10.0*elemList[j].mass*elemList[j].APF/6.022/V;
                printf("%.2lf\n",density);
                break;
            }
        }
    }

}

/*
3
Po
Mo
Cu
*/

72【专业融合:机械】几何约束

#include <stdio.h>
#include <math.h>


struct Point {
    double x, y;
};

struct Segment {
    struct Point start, end;
    int index;  // 线段的索引号
};

// 判断两线段是否相交
int doIntersect(struct Segment s1, struct Segment s2) {
    double x1 = s1.start.x, y1 = s1.start.y;
    double x2 = s1.end.x, y2 = s1.end.y;
    double x3 = s2.start.x, y3 = s2.start.y;
    double x4 = s2.end.x, y4 = s2.end.y;

    double a1 = y2 - y1;
    double b1 = x1 - x2;
    double c1 = a1 * x1 + b1 * y1;

    double a2 = y4 - y3;
    double b2 = x3 - x4;
    double c2 = a2 * x3 + b2 * y3;

    double determinant = a1 * b2 - a2 * b1;

    if (determinant == 0) {
        // 平行线段
        return 0;
    } else {
        double intersectX = (b2 * c1 - b1 * c2) / determinant;
        double intersectY = (a1 * c2 - a2 * c1) / determinant;

        // 检查交点是否在线段内
        if (intersectX >= fmin(x1, x2) && intersectX <= fmax(x1, x2) &&
            intersectX >= fmin(x3, x4) && intersectX <= fmax(x3, x4) &&
            intersectY >= fmin(y1, y2) && intersectY <= fmax(y1, y2) &&
            intersectY >= fmin(y3, y4) && intersectY <= fmax(y3, y4)) {
            return 1;
        } else {
            return 0;
        }
    }
}

int main() {
    int n;
    scanf("%d", &n);

    struct Segment segments[n];

    // 读取线段信息
    for (int i = 0; i < n; ++i) {
        scanf("%lf %lf %lf %lf", &segments[i].start.x, &segments[i].start.y,
              &segments[i].end.x, &segments[i].end.y);
        segments[i].index = i + 1;
    }

    int intersectionCount = 0;

    // 检查线段相交
    for (int i = 0; i < n - 1; ++i) {
        for (int j = i + 1; j < n; ++j) {
            if (doIntersect(segments[i], segments[j])) {
                printf("X: #%d #%d\n", segments[i].index, segments[j].index);
                intersectionCount++;
            }
        }
    }

    // 输出相交的总数
    printf("n=%d\n", intersectionCount);

    return 0;
}


/*
5
1 5 4 5
2 5 10 1
3 2 10 3
6 4 9 4
7 1 8 1
*/

73【专业融合:化学】原子计数

#include <bits/stdc++.h>

using namespace std;

struct Atom {
    string name;
    int count;
};

void resolve(string str,unordered_map<string,int>& atoms){
    int i=0;
    
    while(i<str.length()){
        string atom_e="";
        //检查首字母是否大写
        if(isupper(str[i])){
            atom_e+=str[i++];
        }
        //检查小写字母
        while(i<str.length()&&islower(str[i])){
            atom_e+=str[i++];

        }
        //读取元素数量
        int count=0;
        while(i<str.length()&&isdigit(str[i])){
            count =count*10+(str[i++]-'0');
        }
        if(!count){
            count=1;
        } 
        atoms[atom_e]+=count;  
    }
}


int main() {
    string str;
    cin>>str;
    unordered_map<string ,int> atoms;
    resolve(str,atoms);

    vector<Atom> elements;
    for (const auto& entry : atoms) {
        elements.push_back({entry.first, entry.second});
    }
    sort(elements.begin(), elements.end(), [](const Atom& a, const Atom& b) {
        return a.name < b.name;
    });

    for (const auto& element : elements) {
        cout << element.name << " " << element.count << endl;
    }


    
}
/*
Fe2H3OH
*/

74【专业融合:航海】水下声学定位

#include <stdio.h>
#include <math.h>

#define PI 3.1415926

double solve_area(double AB,double BC,double CD,double DA,double diagonal){
    double s_ABC = (AB + BC + diagonal)/2;
    double s_ADC = (CD + DA + diagonal)/2;
    double area_ABC = sqrt(s_ABC * (s_ABC - AB) * (s_ABC - BC) * (s_ABC - diagonal));
    double area_ADC = sqrt(s_ADC * (s_ADC - CD) * (s_ADC - DA) * (s_ADC - diagonal));
    return area_ABC +area_ADC;
}

double solve_angle(double AB,double BC,double CD,double DA,double diagonal,double area){
    double angle=(4 *area )/(BC * BC + DA * DA - AB * AB - CD * CD);
    return atan(angle)*180.0/PI;
    
}


int main(){
    double ab,bc,cd,da,ac;
    scanf("%lf %lf %lf %lf %lf",&ab,&bc,&cd,&da,&ac);
    double area=solve_area(ab,bc,cd,da,ac);
    double angle=solve_angle(ab,bc,cd,da,ac,area);
    printf("%.6lf %.1lf",area,angle);
}

/*
7 5 5 7 6
*/

75【专业融合:动能】热能计算

#include <stdio.h>

int main() {
    double Ti, Tf;
    scanf("%lf %lf", &Ti, &Tf);


    double m_liquid, c_liquid;
    scanf("%lf %lf", &m_liquid, &c_liquid);


    double m_container, c_container;
    scanf("%lf %lf", &m_container, &c_container);


    double delta_T = Tf - Ti;
    double Q = (m_liquid * c_liquid + m_container * c_container) * delta_T;


    double percentage_container = (m_container * c_container * delta_T / Q) ;
    double percentage_liquid = (m_liquid * c_liquid * delta_T / Q) ;

    printf("%.2lfkJ,%.2lf%%,%.2lf%%\n", Q / 1000, percentage_container, percentage_liquid);

    return 0;
}


/*
20 80
0.250 4186
0.500 900
*/

76【专业融合:热血】火箭发射模拟

#include <stdio.h>

int main() {
    //火箭初始质量、火箭自身干质量、燃烧时间、有效排气速度cE、重力
    double initialMass, dryMass, burnTime, exhaustVelocity, gravity;
   
    scanf("%lf %lf %lf %lf %lf", &initialMass, &dryMass, &burnTime, &exhaustVelocity, &gravity);

    // 推进剂质量
    double propellantMass = initialMass - dryMass;

    double time = 0.0;
    double altitude = 0.0;
    double velocity = 0.0;

    // 时间步长
    double timestep = 0.1;
    double Mass_Flow=propellantMass/burnTime;

    while (time <= burnTime) {

        double thrust = Mass_Flow * exhaustVelocity;

        // 加速度
        double acceleration = (thrust / (dryMass + propellantMass)) ;
        
        /*
        //题目要求-g,但样例过不了
        double acceleration = (thrust / (dryMass + propellantMass))-gravity;
        */
        
       

        // 速度增量
        double velocityIncrement = acceleration * timestep;
        velocity += velocityIncrement;

        // 海拔高度增量
        double altitudeIncrement = velocity * timestep;


        altitude += altitudeIncrement;

        propellantMass -= Mass_Flow* timestep;


        time += timestep;
    }


    printf("%.3lfkm\n", altitude/1000.0);

    return 0;
}
/*
100000 10000 100 4000 9.81
*/

77成绩单

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


struct tagStudent{
    char id[11];//学号
    char name[31];//姓名
    int score;//成绩
};

int compare(const void *a,const void *b){
    int diff=((struct tagStudent*)b)->score - ((struct tagStudent*)a)->score;

    if(diff==0){
        return strcmp(((struct tagStudent *)a)->id, ((struct tagStudent *)b)->id);
    }

    return diff;
}

int main(){
    int n;
    scanf("%d",&n);
    struct tagStudent students[n];
    for(int i=0;i<n;i++){
        scanf("%s %s %d", students[i].id, students[i].name, &students[i].score);
    }
    qsort(students,n,sizeof(struct tagStudent),compare);
    for(int i=0;i<n;i++){
        printf("%s %s %d\n", students[i].id, students[i].name, students[i].score);
    }
}

/*
6
2001900001 Jerry 88
2001900005 Tom 92
2001900006 Mi1la 85
2001900002 Alice 80
2001900003 Mickey 85
2001900004 Aladdin 83

*/

78【专业融合:天文】日出日落时间(WA)

79【专业融合:数学】中位数

#include <stdio.h>
#include <stdlib.h>


int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

// 计算中位数
double calculateMedian(int *array, int size) {
    // 将数组排序
    qsort(array, size, sizeof(int), compare);

    // 计算中位数
    if (size % 2 == 1) {
        return array[size / 2];
    } else {
        int middle1 = array[size / 2 - 1];
        int middle2 = array[size / 2];
        return (double)(middle1 + middle2) / 2;
    }
}

int main() {
    int input;
    int *queue = NULL;
    int size = 0;

    while (1) {
        scanf("%d", &input);

        if (input > 0) {
            size++;
            queue = (int *)realloc(queue, size * sizeof(int));
            queue[size - 1] = input;
        } 
        else if (input == 0)
        {
            double median = calculateMedian(queue, size);

            for (int i = 0; i < size; ++i) {
                printf("%d ", queue[i]);
            }
            printf("%.6lf\n", median);
        } 
        else if(input==-1)
        {
            break;
        }
    }


    return 0;
}

80【专业融合:航天】卫星定位

#include <stdio.h>
#include <math.h>

#define N 11
#define c 299792.458


double X[N],A[N],B[N],C[N],T[N];

void scanf1(double A[N],int n){
    for(int i=0;i<n;i++){
        scanf("%lf",&A[i]);
    }
}

void print1(double A[N],int n) { //输出一个矢量
	int i,tmp;
    double a;
	for (i=0; i<n-1; i++){
        tmp=(int)(A[i]*10000);
        a=(double)tmp/10000.0;
        printf("%.4lf,",a);
    }
    tmp=(int)(A[n-1]*10000);
    a=(double)tmp/10000.0;
    printf("%.4lf",a);
	
}

void print2(double A[N][N],int n) { //输出一个矩阵
	int i, j;
	for (i=0; i<n; i++) {
		for (j=0; j<n; j++)
			printf("%.7lf ", A[i][j]);
		printf("\n");
	}
}

// 计算代数余子式函数,结果=dest
int GetCoFactor(double dest[N][N], double src[N][N], int row, int col, int n)
{
	int i, j;
	int colCount=0,rowCount=0;
	for(i=0; i<n; i++ ) {
		if( i!=row ) {
			colCount = 0;
            for(j=0; j<n; j++ )
				if( j != col ) { //当j不是元素时
					dest[rowCount][colCount] = src[i][j];
					colCount++;
				}
			rowCount++;
		}
	}
	return 1;
}
 
// 递归计算行列式,结果=返回值
double CalcDeterminant(double mat[N][N], int n)
{
	int i,j;
	double det = 0; //行列式值
	double minor[N][N]; // allocate 余子式矩阵

    // n 必须 >= 0,当矩阵是单个元素时停止递归
	if( n == 1 ) return mat[0][0];
	for(i = 0; i < n; i++ ) {
		GetCoFactor(minor, mat, 0, i , n);
		det += ( i%2==1 ? -1.0 : 1.0 ) * mat[0][i] * CalcDeterminant(minor,n-1);
	}
	return det;
}
// 伴随矩阵法矩阵求逆 , 结果存放到 inv 数组
void MatrixInversion(double J[N][N], int n)
{
	int i,j;
    double det, temp [N][N], minor[N][N];
    double inv[N][N];
	
	det = 1.0/CalcDeterminant(J,n); //计算行列式
	for(j=0; j<n; j++)
		for(i=0; i<n; i++) {
			// 得到矩阵A(j,i)的代数余子式 
			GetCoFactor(minor,J,j,i,n);
			inv[i][j] = det*CalcDeterminant(minor,n-1);
			if( (i+j)%2 == 1)
				inv[i][j] = -inv[i][j];
		}
	//结果存回J矩阵
	for(j=0; j<n; j++)
		for(i=0; i<n; i++)
			J[i][j] = inv[i][j];
}

// 由Xn计算函数Fn,结果存放到 F
void CalcF(double F[N],double X[N],int n) {
	double f;
	int i;
	for (i=0; i<n; i++) {
		switch (i+1) {
			case 1: 
				f=X[0]*X[0]+X[1]*X[1]-2*X[0]-X[2]+1; //x^2+y^2-2x-z+1
				break;
			case 2: 
				f=X[0]*X[1]*X[1]-X[0]-3*X[1]+X[1]*X[2]+2; //xy^2-x-3y+yz+2
				break;
			case 3: 
				f=X[0]*X[2]*X[2]-3*X[2]+X[1]*X[2]*X[2]+X[0]*X[1]; //xz^2-3z+yz^2+xy
				break;
		}
		F[i]=f;
	}
}

void CalcF_re(double F[N],double X[N],int n) {
	double f;
	int i;
	for (i=0; i<n; i++) {
		switch (i+1) {
			case 1: 
				f=(X[0]-A[0])*(X[0]-A[0])+(X[1]-B[0])*(X[1]-B[0])+(X[2]-C[0])*(X[2]-C[0])-(c*(T[0]-X[3]))*(c*(T[0]-X[3])); 
				break;
			case 2: 
				f=(X[0]-A[1])*(X[0]-A[1])+(X[1]-B[1])*(X[1]-B[1])+(X[2]-C[1])*(X[2]-C[1])-(c*(T[1]-X[3]))*(c*(T[1]-X[3])); 
				break;
			case 3: 
				f=(X[0]-A[2])*(X[0]-A[2])+(X[1]-B[2])*(X[1]-B[2])+(X[2]-C[2])*(X[2]-C[2])-(c*(T[2]-X[3]))*(c*(T[2]-X[3])); 
                break;
            case 4: 
				f=(X[0]-A[3])*(X[0]-A[3])+(X[1]-B[3])*(X[1]-B[3])+(X[2]-C[3])*(X[2]-C[3])-(c*(T[3]-X[3]))*(c*(T[3]-X[3])); 
		}
		F[i]=f;
	}
}

// 由Xn计算偏导数Jacobian矩阵F'n,结果存放到 J
void CalcJ(double J[N][N],double X[N],int n) {
	double f;
	int i,j;
	for (i=0; i<n; i++)
		switch (i+1) {
			case 1:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=2*X[0]-2;break; // J1.1=2x-2
						case 2: f=2*X[1];break; // J1.2=2y
						case 3: f=-1;break;  // J1.3=-1
					}
					J[i][j]=f;
				}
				break;
			case 2:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=X[1]*X[1]-1;break; // J2.1=y^2-1
						case 2: f=2*X[0]*X[1]-3+X[2];break; // J2.2=2xy-3+z
						case 3: f=X[1];break; // J2.3=y
					}
					J[i][j]=f;
				}
				break;
			case 3:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=X[2]*X[2]+X[1];break; // J3.1=z^2+y
						case 2: f=X[2]*X[2]+X[0];break; // J3.2=z^2+x
						case 3: f=2*X[0]*X[2]-3+2*X[1]*X[2];break; // J3.3=2xz-3+2yz
					}
					J[i][j]=f;
				}
				break;								
		}
}

// 由Xn计算偏导数Jacobian矩阵F'n,结果存放到 J
void CalcJ_re(double J[N][N],double X[N],int n) {
	double f;
	int i,j;
	for (i=0; i<n; i++)
		switch (i+1) {
			case 1:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=2*(X[0]-A[0]);break; // J1.1=2(x-A1)
						case 2: f=2*(X[1]-B[0]);break; // J1.2=2(y-B1)
						case 3: f=2*(X[2]-C[0]);break;  // J1.3=2(z-C1)
                        case 4: f=2*c*c*(T[0]-X[3]);break;//J1.4=2*c^2(t1-d)
					}
					J[i][j]=f;
				}
				break;
			case 2:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=2*(X[0]-A[1]);break; // J1.1=2(x-A1)
						case 2: f=2*(X[1]-B[1]);break; // J1.2=2(y-B1)
						case 3: f=2*(X[2]-C[1]);break;  // J1.3=2(z-C1)
                        case 4: f=2*c*c*(T[1]-X[3]);break;//J1.4=2*c^2(t1-d)
					}
					J[i][j]=f;
				}
				break;
			case 3:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=2*(X[0]-A[2]);break; // J1.1=2(x-A1)
						case 2: f=2*(X[1]-B[2]);break; // J1.2=2(y-B1)
						case 3: f=2*(X[2]-C[2]);break;  // J1.3=2(z-C1)
                        case 4: f=2*c*c*(T[2]-X[3]);break;//J1.4=2*c^2(t1-d)
					}
					J[i][j]=f;
				}
				break;
            case 4:
				for (j=0; j<n; j++) {
					switch (j+1) {
						case 1: f=2*(X[0]-A[3]);break; // J1.1=2(x-A1)
						case 2: f=2*(X[1]-B[3]);break; // J1.2=2(y-B1)
						case 3: f=2*(X[2]-C[3]);break;  // J1.3=2(z-C1)
                        case 4: f=2*c*c*(T[3]-X[3]);break;//J1.4=2*c^2(t1-d)
					}
					J[i][j]=f;
				}
				break;									
		}
}

// 计算 J^-1* F,结果存放到 R
void CalcJF(double R[N], double J[N][N], double F[N], int n) {
	int i,j,k;
	for (i=0; i<n; i++) {
		R[i]=0.0;
		for (j=0; j<n; j++)
			R[i] = R[i] + J[i][j]*F[j];
	}
}

// 计算 X=X0-R,结果存放到 X
void CalcX(double X[N],double X0[N],double R[N],int n) {
	int i;
	for (i=0; i<n; i++)
		X[i]=X0[i]-R[i];
}

// 计算 A=B,结果存放到 A
void AequB(double A[N],double B[N],int n) {
	int i;
	for (i=0; i<n; i++)
		A[i]=B[i];
}

// 计算 F-
double Ferror(double F[N], int n) {
	double m=0;
	int i;
	for (i=0; i<n; i++) {
		double t=fabs(F[i]);
		if (m<t) m = t;
	}
	return m;
}

// Newton–Raphson method 牛顿迭代法求非线性方程组的根,存放到X0
void mvNewtons(double X0[N], int n, double e) {
	// Guess为初始猜测值 e为迭代精度要求
	int k;
	double J[N][N],Y[N][N];
	double X[N],R[N],F[N];
	//X0一开始为初始猜测值
	for (k=1; k<=20; k++) { //限定20次迭代
        /*
		printf("-------------- n=%d\n",k);
		printf("X\n");
		print1(X0,n); //输出X0
        */
		CalcF_re(F,X0,n); //计算F矩阵
        /*
		printf("F\n"); //观察 F
		print1(F,n); //输出F
        */
		CalcJ_re(J,X0,n); //计算Jacobian矩阵F'n(x0)
        /*
		printf("J\n");
		print2(J,n); //观察 J
        */
		MatrixInversion(J, n); // 求J的逆矩阵 J^-1
		CalcJF(R,J,F,n); // R=J^-1 * F
		CalcX(X,X0,R,n); // X=X0-R
		AequB(X0,X,n); // X0=X 下次迭代
		if (Ferror(F,n)<e) break; //达到精度要求,终止迭代
	}
}

int main() {
	int n=4;
    scanf("%lf %lf %lf",&A[0],&B[0],&C[0]);
    scanf("%lf %lf %lf",&A[1],&B[1],&C[1]);
    scanf("%lf %lf %lf",&A[2],&B[2],&C[2]);
    scanf("%lf %lf %lf",&A[3],&B[3],&C[3]);
    scanf1(T,n);
    scanf1(X,n);
	mvNewtons(X,n,1e-6); //根存放在X
    print1(X,3);
	return 0;
}

/*
15600 7540 20140
18760 2750 18610
17610 14630 13480
19170 610 18390
0.07074 0.07220 0.07690 0.07242
0 0 6370 0
*/

80-90

81【算法策略:动态规划】上楼梯

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


int solve(int N,int M,int *bad){
    int dp[N+1];
    memset(dp,0,sizeof(dp));
    for(int i=0;i<M;i++){
        dp[bad[i]]=-1;
    }
    dp[0]=1;
    if(dp[1]!=-1)dp[1]=1;
    else dp[1]=0;
    for(int i=2;i<=N;i++){
        if(dp[i]==-1){
            dp[i]=0;
        }
        else{
            dp[i]=(dp[i-1]+dp[i-2])%1000000007;
        }

    }
    return dp[N];

}

int main(){
    int N,M;
    scanf("%d %d",&N,&M);

    int *bad=(int *)malloc(M*sizeof(int));
    for(int i=0;i<M;i++){
        scanf("%d",&bad[i]);
    }
    printf("%d\n",solve(N,M,bad));
}

82【算法策略:动态规划】挑选

#include <stdio.h>
#include <time.h>

#include <limits.h>

#include <stdlib.h>

int max(int a, int b) {
    return (a > b) ? a : b;
}


void quickSort(long long arr[], long long left, long long right) {
	if (left >= right) return;
	srand(time(NULL));
	long long idx = rand() % (left - right) + left;
	long long flag = arr[idx], head = left - 1, tail = right + 1;
	while (head < tail) {
		do head++; while(arr[head] < flag);
		do tail--; while(arr[tail] > flag);
		if (head < tail) {
			long long tmp = arr[head];
			arr[head] = arr[tail];
			arr[tail] = tmp;
		}
	}
	quickSort(arr, left, tail);
	quickSort(arr, tail + 1, right);
}



int main() {
    long long  n;
    scanf("%lld", &n);

    long long  arr[n];

    // 输入序列
    for (int i = 0; i < n; i++) {
        scanf("%lld", &arr[i]);
    }
    quickSort(arr,0,n-1);

    // 初始化动态规划数组
    int dp[n];
    dp[0] = arr[0];
    int MAX=0;

    // 动态规划递推
    for (int i = 1; i < n; i++) {

        /*
        当arr[i]和前一个数字相等时,判断正负数,即相加后是否变小即可,选大的填入
        */
        if(arr[i]==arr[i-1])
        {
            dp[i]=max(dp[i-1],dp[i-1]+arr[i]);
        }
        /*
        存在111112333334555555这种情况
        */
        else{
            int j=i-1;
            while(j>=0&&arr[j]==arr[i]-1) j--;
            if(j>=0){
                dp[i]=arr[i]+dp[j];
            }
            else
            {
                dp[i]=arr[i];
            }
        }
        MAX=max(MAX,dp[i]);
    }

    printf("%d\n", MAX);

    return 0;
}

83【算法策略:回溯】和字符串

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
 
long long substrToNum(char str[], int pos, int len) {
	long long num = 0;
	for (int i = 0; i < len; ++i)
		num = num * 10 + str[pos + i] - '0';
	return num;
}
 
long long getLen(long long n) {
	int cnt = 0;
	do ++cnt, n /= 10; while(n);
	return cnt;
}
 
bool backTracking(char str[], int strLen, int begin, int len1, int len2) {
	if (begin + len1 + len2 >= strLen) return true;
	long long num1 = substrToNum(str, begin, len1);
	long long num2 = substrToNum(str, begin + len1, len2);
	long long num3 = substrToNum(str, begin + len1 + len2, getLen(num1 + num2));
    printf("%lld,%lld,%lld\n", num1, num2, num3);
	if (num1 + num2 == num3) return backTracking(str, strLen, begin + getLen(num1), getLen(num2), getLen(num3));
	return false;
}
 
void partition(char str[]) {
	int strLen = strlen(str);
	for (int i = 1; i <= strLen / 2; ++i) {
		if (backTracking (str, strLen, 0, i, i)) {
			printf("true\n");
			return;
		}
	}
	printf("false\n");
}
 
int main() {
	char str[1000] = "";
	scanf("%s", str);
	partition(str);
	return 0;
}

84【算法策略:贪心】汤包

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

struct customer{
    int t;
    int d;
    int etime;
    int index;
};

int main(){
    int n;
    scanf("%d",&n);
    struct customer a[n];
    for(int i=0; i<n; i++){
        a[i].index=i+1;
        scanf("%d %d",&a[i].t,&a[i].d);
        a[i].etime=a[i].t+a[i].d;
    }
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1-i;j++){
            if((a[j].etime>a[j+1].etime)||((a[j].etime==a[j+1].etime)&&a[j].index>a[j+1].index)){
                int tmp=a[j].etime;
                a[j].etime=a[j+1].etime;
                a[j+1].etime=tmp;
                tmp=a[j].index;
                a[j].index=a[j+1].index;
                a[j+1].index=tmp;
            }

        }
    }

    for(int i=0;i<n;i++){
        printf("%d ",a[i].index);
    }

}

/*
3
3 3
1 3
2 3
*/

85【算法策略:优雅的策略】危险的组合

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

int n;
int num;
int a[30];


void dfs(int i,int flag){

    if(i==n) {
        if(flag>=1) num++;
        return;
    }
    for(int j=0;j<2;j++){
        a[i]=j;
        if(i>=2&&a[i-1]==a[i]&&a[i-1]==a[i-2]&&a[i]==1){
            dfs(i+1,flag+1);
        }
        else{
            dfs(i+1,flag);
        }

    }


}


int main(){
    
    while(1){
        scanf("%d",&n);
        num=0;
        if(n<=0) break;
        dfs(0,0);
        printf("%d\n",num);
    }
}

86【算法策略:动态规划】打字机

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

#define MAX_LEN 1000

int main() {
    char str[MAX_LEN];
    scanf("%s", str);

    int len = strlen(str);

    for (int i = 0; i < len; ++i) {
        if (str[i] == 'm' || str[i] == 'w') {
            printf("0\n");
            return 0;
        }
    }

    long long dp[MAX_LEN];
    dp[0] = 1;
    dp[1] = 1;

    /*
    动态规划过程:
    以nn为例子,dp[i]代表前i个字符串的总可能性,注意空字符串也算一种可能性
    识别到"nn"时有两种情况选择,一种是保持nn,此时要单独看待input[1],也就是
    第2个n,此时的字符串可能性即为dp[1];另一种是转换为w,此时字符串的可能性为
    dp[0],也就是空字符串的可能性。
    */
    for (int i = 1; i < len; ++i) {
        dp[i + 1] = dp[i];
        if ((str[i] == 'n' && str[i - 1] == 'n') || (str[i] == 'u' && str[i - 1] == 'u')) {
            dp[i + 1] += dp[i - 1];
        }
    }

    printf("%lld\n", dp[len]);

    return 0;
}

87【算法策略:分治】子数组最大和

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





int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    int dp[n];
    for(int i=0; i<n; i++){
        scanf("%d",&a[i]);
        dp[i]=a[i];
    }
    for(int i=1;i<n;i++){
        if(dp[i]+dp[i-1]>dp[i]){
            dp[i]=dp[i]+dp[i-1];
        }
    }
    int max=0;
    for(int i=0;i<n;i++){
        if(dp[i]>max) max=dp[i];
    }
    printf("%d\n",max);
    
    
    
}

/*
7
2 -4 1 9 -6 7 -3
*/

88【算法策略:贪心】绝对差

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



void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}


int partition(int arr[], int low, int high) {
    int pivot = arr[high];
    int i = low - 1;

    for (int j = low; j <= high - 1; j++) {
        if (arr[j] < pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }

    swap(&arr[i + 1], &arr[high]);
    return i + 1;
}


void quickSort(int arr[], int low, int high) {
    if (low < high) {
       
        int pivotIndex = partition(arr, low, high);

        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

int main(){
    int n;
    scanf("%d",&n);
    int arr[n];
    for(int i=0; i<n; i++){
        scanf("%d",&arr[i]);
    }
    quickSort(arr,0,n-1);
    int min=9999999;
    for(int i=0;i<n-1;i++){
        if(abs(arr[i+1]-arr[i])<min){
            min=abs(arr[i+1]-arr[i]);
        }
    }
    printf("%d\n",min);

}

89【算法策略:回溯】游乐园

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

int n,m;
int map[1000][1000]={0};
int used[1000]={0};
int MAX=0;;

int max(int x, int y){
    if(x>y) return x;
    return y;
}

void dfs(int s,int sum){
    MAX=max(MAX,sum);
    for(int i=1;i<=n;i++){
        if(map[s][i]&&!used[i]){
            used[i]=1;
            dfs(i,sum+map[s][i]);
            used[i]=0;
        }
    }
}


int main(){
    scanf("%d %d",&n,&m);
    int a,b,c;
    memset(map,0,sizeof(map));
    for(int i=0;i<m;i++){
        scanf("%d %d %d",&a,&b,&c);
        map[a][b]=c;
        map[b][a]=c;
    }
    for(int i=1;i<=n;i++){
        memset(used,0,sizeof(used));
        used[i]=1;
        dfs(i,0);
    }
    printf("%d\n",MAX);

}

/*
4 4
1 2 1
2 3 10
1 3 100
1 4 1000
*/

90【算法策略:贪心】三角形

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

//快排模板
void quicksort(int arr[], int l, int r)
{
    if (l >= r)
    {
        return;
    }
    else
    {
        int i = l - 1;
        int j = r + 1;
        int x = arr[(l + r) / 2];
        while (i < j)
        {
            do
            {
                i++;
            } while (arr[i] > x);
 
            do
            {
                j--;
            } while (arr[j] < x);
 
            if (i < j)
            {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        quicksort(arr, l, j);
        quicksort(arr, j + 1, r);
    }
}



//----------------------------------------------------------------

void is_Triangle(int arr[], int n){
    for(int i=0;i<n-2;i++){
        if(arr[i]<arr[i+1]+arr[i+2]){
            printf("%d %d %d\n",arr[i+2],arr[i+1],arr[i]);
            return ;
        }
    }

    printf("-1");

}



int main(){
    int n;
    scanf("%d", &n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d", &a[i]);
    }
    quicksort(a,0,n-1);
    is_Triangle(a,n);
}

/*
6
1 8 5 2 4 3
*/

91-100

91【考试题型:字符串】左右操作

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


//快排模板
void quicksort(char arr[], int l, int r)
{
    if (l >= r)
    {
        return;
    }
    else
    {
        int i = l - 1;
        int j = r + 1;
        char x = arr[(l + r) / 2];
        while (i < j)
        {
            do
            {
                i++;
            } while (arr[i] > x);
 
            do
            {
                j--;
            } while (arr[j] < x);
 
            if (i < j)
            {
                char tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        quicksort(arr, l, j);
        quicksort(arr, j + 1, r);
    }
}



//----------------------------------------------------------------

void swap(char arr[],int l,int r){
    for(int i=l;i<(r-l+1)/2+l;i++){
        char tmp=arr[i];
        int x=r-1-(i-l);
        arr[i]=arr[x];
        arr[x]=tmp;
    }
}

int main(){
    char str[1000];
    scanf("%s", str);
    int n=strlen(str);
    quicksort(str, 0,n/2-1);
    int right_s=n%2?n/2+1:n/2;
    swap(str,right_s,n);
    printf("%s\n",str);
}

/*
abcdefX181292
*/

92【考试题型:输入输出】气体扩散

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

int main(){
    double a,b;
    scanf("%lf %lf",&a,&b);
    double result=sqrt(b/a);
    printf("%.4lf\n",result);
}

/*
349.03 352.04
*/

93【考试题型:文件】平方根

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

int main(){
    int n;
    double result;
    scanf("%d",&n);
    FILE *file = fopen("rr.dat","w");

    for(int i=1;i<=n;i++){
        result=sqrt(i);
        fprintf(file, "%.6f\n", result);
    }
    fclose(file);
    file = fopen("rr.dat", "r");

    while (fscanf(file, "%lf", &result) == 1) {
        printf("%.6f ", result);
    }
    fclose(file);
}


94【考试题型:结构体】空中交通管制

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


struct flight{
    char name[100];
    int x,y;
};

double solve(int x1,int y1,int x2,int y2){
    return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}



int main(){

    int n;
    scanf("%d", &n);
    struct flight a[n];
    for(int i=0;i<n;i++){
        scanf("%s %d %d",a[i].name,&a[i].x,&a[i].y);
    }
    double min=9999999;
    char flight1[100];
    char flight2[100];
     for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            double distance = solve(a[i].x, a[i].y, a[j].x, a[j].y);
            if (distance < min) {
                min = distance;
                snprintf(flight1, sizeof(flight1), "%s", a[i].name);
                snprintf(flight2, sizeof(flight2), "%s", a[j].name);
            }
        }
    }

    // 输出结果
    printf("%s-%s %.4lf\n", flight1, flight2, min);

    return 0;

    
}

/*
6
UAO57 2 3
AA044 12 30
BA1534 40 50
DL262 5 1
AF001 12 10
SK837 3 4
*/

95【考试题型:循环(迭代)】圆周率Π

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

int main(){
    int n;
    scanf("%d",&n);
    double result=3.0;
    double flag=1.0;
    for(int i=2;i<=(n-1)*2;i+=2){
        result+=4.0/(double)(i*(i+1)*(i+2))*flag;
        flag=-flag;
    }
    printf("%.7lf", result);
}

96【考试题型:分支选择】马赫数

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


int main(){
    double V,T;
    scanf("%lf %lf",&V,&T);
    double c=331.3*sqrt(1.0+T/273.15);
    double M=(V*1000.0)/3600.0/c;
    printf("%.3lf ",M);
    if(M<=0.8){
        printf("subsonic");
    }
    else if(M>0.8&&M<=1.2){
        printf("transonic");
    }
    else if(M>1.2&&M<=5.0){
        printf("supersonic");
    }
    else if(M>5.0&&M<=10.0){
        printf("hypersonic");
    }

}

/*
920 -49.90
*/

97【考试题型:数组】重复元素

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





int main(){
    int n;
    scanf("%d",&n);
    long long a[1001];
    for(int i=0;i<n;i++){
        scanf("%lld",&a[i]);
    }
    int sum=0;
    for(int i=1;i<n;i++){
        for(int j=0;j<i;j++){
            if(a[i]==a[j]) {
                sum++;
                break;
            }
        }
    }
    printf("%d\n",sum);
}

/*
10
1 10 20 1 25 1 10 30 25 1
*/

98【考试题型:枚举】机场翻牌显示

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


int main(){
    char str1[10];
    char str2[10];
    int sum=0;
    scanf("%s",str1);
    scanf("%s",str2);
    for(int i=0;i<6;i++){
        if(i<=1){
            sum+=(str2[i]-str1[i]+26)%26;

        }
        else {
            sum+=(str2[i]-str1[i]+10)%10;
        }

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

}

/*
MU2103
CA8326
*/

99【考试题型:算法策略(递归分治贪心动态规划)】零钞

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


int main(){
    int n;
    scanf("%d",&n);
    int a[4]={10,5,2,1};
    int b[4];
    for(int i=0;i<4;i++){
        b[i]=n/a[i];
        if(b[i]!=0)
            n=n%a[i];
    }
    for(int i=3;i>=0;i--){
        if(b[i]!=0)
            printf("%d=%d\n",a[i],b[i]);
    }

}

100【考试题型:函数(递归)】阿克曼函数

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


int A(int x,int y){
    if(x==0) return y+1;
    if(y==0) return A(x-1,1);
    return A(x-1,A(x,y-1));
}


int main(){
    int m,n;
    scanf("%d %d",&m,&n);
    int result=A(m,n);
    printf("%d\n",result);
}
  • 104
    点赞
  • 380
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值