算法-蓝桥杯习题(4-3)

/*
算法提高 多项式输出
*/
//多项式输出
#include<stdio.h>
int main()
{
    int n,a[101],i;
    
    scanf("%d",&n);
    
    for(i=n;i>=0;i--)
        scanf("%d",&a[i]);
    
    for(i=n;i>=0;i--)
    {
        if(i==n)  //指数为首位
        {
            //系数大于0且等于1
            if(a[i]>0 && a[i]!=1)
                printf("%dx^%d",a[i],i);
            //系数大于0且等于1
            if(a[i]>0 && a[i]==1)
                printf("x^%d",i);
            //系数小于0且不等于-1
            if(a[i]<0 && a[i]!=-1)
                printf("%dx^%d",a[i],i);
            //系数小于0且等于-1
            if(a[i]<0 && a[i]==-1)
                printf("-x^%d",i);
        }
        
        else if(i>1 && i!=n)  //指数不为0 且不为首位
        {
            //系数大于0且不等于1
            if(a[i]>0 && a[i]!=1)
                printf("+%dx^%d",a[i],i);
            //系数大于0同时等于1
            if (a[i]>0 && a[i]==1)
                printf("+x^%d",i);
            //系数小于0且不等于-1
            if(a[i]<0 && a[i]!=-1)
                printf("%dx^%d",a[i],i);
            //系数小于0同时等于-1
            if(a[i]<0 && a[i]==-1)
                printf("-x^%d",i);
        }
        else if(i==1)
        {
            //系数大于0且不等于1
            if(a[i]>0 && a[i]!=1)
                printf("+%dx",a[i]);
            //系数大于0同时等于1
            if (a[i]>0 && a[i]==1)
                printf("+x");
            //系数小于0且不等于-1
            if(a[i]<0 && a[i]!=-1)
                printf("%dx",a[i]);
            //系数小于0同时等于-1
            if(a[i]<0 && a[i]==-1)
                printf("-x");
        }
        
        else  //指数为0
        {
            if(a[i]>0)
                printf("+%d\n",a[0]);
            else if(a[i]<0)
                printf("%d\n",a[0]);
        }
    }
    printf("\n");
    return 0;
}
/*
算法提高 矩阵乘方
*/
#include <stdio.h>
int b, m;
int a[2][2], ans[2][2], temp[2][2] = {1,1,1,1};
void play()
{
    int cnt, cnt2;
    for(cnt = 0; cnt < 2; ++cnt)
    {
        for(cnt2 = 0; cnt2 < 2; ++cnt2)
        {
            printf("%d ", ans[cnt][cnt2]);
        }       
        printf("\n");
    }   
}
void cp(int arr1[][2], int arr2[][2])
{
    int cnt, cnt2;
    
    for(cnt = 0; cnt < 2 ;++cnt)
        for(cnt2 = 0; cnt2 < 2; ++cnt2)
            arr1[cnt][cnt2] = arr2[cnt][cnt2];
}
void mod(int arr[][2])
{
    int cnt, cnt2;
    
    for(cnt = 0; cnt < 2; ++cnt)
        for(cnt2 = 0; cnt2 < 2; ++cnt2)
            arr[cnt][cnt2] %= m;
}
void fun2(int a[][2], int b[][2])
{
    int cnt, cnt2;
    
    temp[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0];
    temp[0][1] = a[0][0]*b[0][1]+a[0][1]*b[1][1];
    temp[1][0] = a[1][0]*b[0][0]+a[1][1]*b[1][0];
    temp[1][1] = a[1][0]*b[0][1]+a[1][1]*b[1][1];
}
void fun(int arr[][2], int k)
{
    int cnt;
    
    if(k == 0)
    {
        mod(temp);
        cp(ans, temp);
        return;
    }
    
    if(k == 1)
    {
        mod(ans);
        
        return;
    }
    if(k == 2)
    {
        fun2(a, a);
        cp(ans, temp);
    //  printf("2\n");
    //  play();
        mod(ans);
        return;
    }
    if(k%2 == 0)
    {
        fun(arr, k/2);
        fun2(ans, ans);
        cp(ans, temp);
        //printf("=0\n");
        //play();
        
        mod(ans);
        return;
    }
    if(k%2 != 0)
    {
        fun(arr, k-1);
        fun2(ans, arr);
        cp(ans, temp);
        //printf("!=0\n");
    //  play();
        mod(ans);
        return;
    }
}
int main()
{
    int cnt, cnt2;
    
    scanf("%d%d", &b, &m);
    
    for(cnt = 0; cnt < 2; ++cnt)
        for(cnt2 = 0; cnt2 < 2; ++cnt2)
        {
            scanf("%d", &a[cnt][cnt2]);
            ans[cnt][cnt2] = a[cnt][cnt2];
        }
    
    fun(a, b);
    
    play();
    
    
    return 0;
}
/*
算法提高 夺宝奇兵
*/
//夺宝奇兵
#include<stdio.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    int N,i,j;
    int a[101][101]={0};
    int f[101][10]={0};
    
    scanf("%d",&N);
    
    for(i=1;i<=N;i++)
       for(j=1;j<=i;j++)
            scanf("%d",&a[i][j]);
    
     for(i=N;i>=0;i--)
        for(j=1;j<=i;j++)
        {
            f[i][j]=max( f[i+1][j],f[i+1][j+1] )+a[i][j];
        }
     printf("%d\n",f[1][1]);
    return 0;
}
 
/*
算法提高 利息计算 
*/
#include <stdio.h>
#include <stdlib.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
 
 
int main(int argc, char *argv[]) {
    double x,n;
    double sum=0;
    scanf("%lf",&x);
    scanf("%lf",&n);
    sum=x+(x*(n/100)*0.8);
    printf("%.2lf",sum);
 
 
    return 0;
}

 

posted @ 2021-11-23 19:28  随手一只风  阅读(68)  评论(0编辑  收藏  举报