上午:
补题:
成年的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;
}