竞赛讨论区 > c题的评测不全吧

c题的评测不全吧

#include <bits/stdc++.h>
//#define int long long
#define ioss ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
template <class cl>
void read(cl &x)
{
    x = 0;
    int f = 0;
    char ch;
    ch = getchar();
    while (!isdigit(ch))
    {
        f = f | (ch == '-'), ch = getchar();
    }
    while (isdigit(ch))
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    x = f ? -x : x;
    return;
}
template <class cl>
void put(cl x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        put(x / 10);
    putchar(x % 10 + '0');
    return;
}
int jud=0;
int ans[30];
int tt;
int t1;
int len;
char ch[50];
// 这里的一切都是从0开始计数的,这样可以省去取整时的麻烦。
inline void dfs(int pos)
{
     if(jud) return ; 
    if(pos>=len) //pos==len 的时候结束,但是结果为0到pos-1。
    {
       jud=1;
       for(int i=0;i<=len/2;i++)
       {
          cout<<ans[i];
       }
       puts("");
      // exit(0); 
       return ;
    }
    for(int i=0;i<=9;i++)
    {
        tt=0;
         ans[pos]=i;
      //  else ans[pos]=0;//这里要注意。
        for(int j=0;j<=pos;j++)
        {
           t1=ans[j]*ans[pos-j]%10;
           tt=(tt+t1)%10;
        }
        if(tt==(int)(ch[pos]-'0'))
        {
            dfs(pos+1);
        }
        if(jud) return ;
    }
    /* 
    if(i>=10) //这样是不对的,会造成找不全。
    {
        exit(0);
        return ;
    }
    */
}

signed main()
{
    scanf("%s",ch);
    len=strlen(ch);
    if(len%2==0)
    {
        puts("-1");
        return 0;
    }
    int j=len-1;
    int cnt=0;
    while(ch[j]=='0')
    {
        j--;
        cnt++;
    }
    if(cnt%2==1)
    {
        puts("-1");
        return 0;
    }
    dfs(0);
    if(jud==0)
    {
        puts("-1"); 
        return 0;
    }
    return 0;
}  
 
 这个测评有问题。输入146 输出12  是错误的 但是这个代码通过测试了。

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐