蓝桥杯历届试题 约数倍数选卡片

如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣。

蓝桥杯历届试题 约数倍数选卡片_第1张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int ct1,ct2,vis[110],S[110],T[110];
char str[10005];
vectorV[110];
void input()//不确定个数的数读入
{
    gets(str);
    int num=0;
    ct1=ct2=0;
    memset(vis,0,sizeof vis);
    for(int i=0; i<=strlen(str); i++)
    {
        if(isdigit(str[i]))
            num=num*10+str[i]-'0';
        else
        {
            if(num)
            {
                S[ct1++]=num;
                vis[num]++;//数字出现的次数
            }
            num=0;
        }
    }
    gets(str);
    num=0;
    for(int i=0; i<=strlen(str); i++)
    {
        if(isdigit(str[i]))
            num=num*10+str[i]-'0';
        else
        {
            if(num)
                T[ct2++]=num;
            num=0;
        }
    }
}
bool dfs(int u)//如果下一个人必败,那么当前必胜;如果下一个人存在必胜态,那么当前必败。
{
    int fg=0;
    for(int i=V[u].size()-1; i>=0; i--)
    {
        int num=V[u][i];
        if(vis[num])
        {
            vis[num]--;
            fg|=dfs(num);
            vis[num]++;
            if(fg)
                return false;
        }
    }
    return true;
}
int main()
{
    input();
    for(int i=1; i<=100; i++)
    {
        for(int j=i; j<=100; j+=i)
        {
            if(vis[i] && vis[j])//数字都出现过
            {
                V[i].push_back(j);
                V[j].push_back(i);
            }
        }
    }
    sort(T,T+ct2);
    for(int i=0; i

 

你可能感兴趣的:(蓝桥杯练习)