2022.1.18

上午:

补题:

成年的Bob

(开始错的,重新打了一遍对了,然后就开始找哪错了,最终发现是那个NO里的O错了)

/*
注意:
输入时带点
输出的大小写
注意对闰年二月的处理
*/
#include<stdio.h>
int dd,mm,yy;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int judge(int bd,int bm,int by)
{
    //printf("%d %d %d\n",bd,bm,by);
     //先判断日期的合理性
    //单独处理闰年二月的情况
    if(by%4==0&&bm==2)
    {
        if(bd<1||bd>month[bm]+1||bm<1||bm>12||by<1||by>99)
            return 0;
    }
    else
    {
        if(bd<1||bd>month[bm]||bm<1||bm>12||by<1||by>99)
            return 0;
    }
    //满18的三种情况
    //这里是三种情况:绝对的超过18岁,当年18但是月份小,18且月份相同日子小或同一天
    if(yy-by>18||(yy-by==18&&bm<mm)||(yy-by==18&&bm==mm&&bd<=dd))
        return 1;
    else
        return 0;
}
int main()
{
    int flag[10];
    int bd,bm,by;
    //先输入两个时间,一个比赛时间一个生日时间
    scanf("%d. %d. %d",&dd,&mm,&yy);
    scanf("%d. %d. %d",&bd,&bm,&by);
    //全排列也只有6种情况,直接枚举呗
    flag[0]=judge(bd,bm,by);
    flag[1]=judge(bd,by,bm);
    flag[2]=judge(bm,bd,by);
    flag[3]=judge(bm,by,bd);
    flag[4]=judge(by,bm,bd);
    flag[5]=judge(by,bd,bm);
    if(flag[0]||flag[1]||flag[2]||flag[3]||flag[4]||flag[5])
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}

下午:

看书;

听课;

晚上:

补题:

make them equal

/*
题解:
思想就是将所有的数全部加到a[1]上,再整除到各个数
(因为a[1]方便进行减的操作)
【1】为了方便把数字全部加到a[1]上,先把a[i]变成i的倍数
【2】再将a[i]加到a[1]上(全部,即这部操作完成后a[i]会变成0)
【3】最后a[1]将平均数减到已经在【2】中被减为0的各个a[i]上
*/
#include<stdio.h>
int main()
{
    int a[10005];
    int n;
    int t;
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        int ans=0;
        scanf("%d",&n);
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[j]);
            ans+=a[j];
        }
        //当平均数不为整数时,直接输出-1(规定了是整数)
        if(ans%n!=0)
        {
            printf("-1\n");
        }
        else
        {
            int aver=ans/n;
            //直接输出操作数
            int k=3*(n-1);
            printf("%d\n",k);
            for(int z=2;z<=n;z++)
            {
                int b=a[z]%z;
                //a[i]-=i*x;
                //a[j]+=i*x;
                printf("1 %d %d\n",z,(z-b)%z);
                if(a[z]%z!=0)
                {
                    a[1]-=(z-b)%z;
                    a[z]+=(z-b)%z;
                }
                printf("%d 1 %d\n",z,a[z]/z);
                a[1]+=a[z];
                a[z]=0;
            }
            //到这里a[1]==ans;
            for(int z=2;z<=n;z++)
            {
                printf("1 %d %d\n",z,aver);
                a[1]-=aver;
                a[z]+=aver;
            }
        }
    }
    return 0;
}

建树,三种遍历:

#include<stdio.h>
#include<stdlib.h>
//数据,左孩子指针,右孩子指针
typedef struct bitnode
{
    char data;
    struct bitnode *lchild,*rchild;
}bitnode,*bitree;//即bitree表示一个地址
char Q[10000];
int back=0,front=0;
void push(char ch)
{
    Q[back++]=ch;
}
bitree pop()
{
    return Q[front++];
}
bitree createtree()
{
    char ch;
    scanf("%c",&ch);
    //先让树的头指针指空
    bitree T=0;
    if(ch=='#')
        T=0;
    else
    {
        T=(bitree)malloc(sizeof(bitnode));
        T->data=ch;
        //按前序遍历就是“父左右”
        T->lchild=createtree();
        T->rchild=createtree();
    }
    return T;
}
//前序遍历
void preordertraverse(bitree T)
{
    if(T)
    {
        //顺序为父左右
        printf("%c",T->data);
        preordertraverse(T->lchild);
        preordertraverse(T->rchild);
    }
}
//中序遍历
void inordertraverse(bitree T)
{
    if(T)
    {
        //顺序为左父右
        inordertraverse(T->lchild);
        printf("%c",T->data);
        inordertraverse(T->rchild);
    }
}
//后序遍历
void postordertraverse(bitree T)
{
    if(T)
    {
        //左右父
        postordertraverse(T->lchild);
        postordertraverse(T->rchild);
        printf("%c",T->data);
    }
}

int main()
{
    bitree T;
    //创建了一棵树
    T=createtree();
//    //前序遍历
//    preordertraverse(T);
//    //中序遍历
//    inordertraverse(T);
//    //后序遍历
//    postordertraverse(T);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值