[7.10] 纪中C组

来源:互联网 发布:手机如何设置网络共享 编辑:程序博客网 时间:2024/06/04 19:34

第一题
题目说的很[哔——],然而不顶什么用
说是用最少的二进制数(0,1,10之类的整数)覆盖完整数,然而想一想就可以知道,若采用最优策略,那么最少只需要整数中某一位最大的数的次数就行啦

#include <iostream>#include <cstdio>using namespace std;int k,n,i,j,m;int main(){    freopen("a.in","r",stdin);    freopen("a.out","w",stdout);    scanf("%d",&k);    for (i=1;i<=k;i++)    {        m=0;        scanf("%d",&n);        for (j=1;j<=7;j++)        {            m=max(m,n%10);            n/=10;        }        printf("%d\n",m);    }}

第二题
KC会先给定一个数字Q,每次操作玩家必须写出当前数字的一个因数来代替当前数字,但是这个因数不能是1和它本身。现在规定第一个没有数字可以写出的玩家为胜者。
简单来说就是谁搞到质数谁就赢了
然后分类讨论
1、给的数字就是质数的时候
2、给的数字只有质因数的时候
3、正常情况
然后我们第一步就是码头文件码一波分解因数,每得到一个因数,就把q除到不能再除为止
然后就是自然分类讨论啦
这[哔——]应该不用我说了吧

#include <iostream>#include <cstdio>#include <cmath>using namespace std;long long x,q,k,i;int main(){    freopen("num.in","r",stdin);    freopen("num.out","w",stdout);    scanf("%lld",&q);    k=q;    for (i=2;i<=trunc(sqrt(q));i++)    while (q%i==0)    {        x++;        q/=i;    }    if ((float)trunc(sqrt(q))==(float)sqrt(q))    x++;    q=k;    if (x==0)    {        printf("1\n0");        return 0;    }    else    if (x==1)    {        printf("2");        return 0;    }    else    {        x=1;        for (i=2;i<=trunc(sqrt((float)q));i++)        while (q%i==0)        {            q/=i;            x*=i;            if (x!=i)            {                printf("1\n%lld",x);                return 0;            }        }    }}
原创粉丝点击