Zpic_NKU 2021-11-20 19:44 采纳率: 50%
浏览 35
已结题

为啥会出现这种情况?

对于两个正整数n, m,如果将n末尾的几个数字平移(不改变被移动的数字的顺序)到n的首端从而能得到m,则称n和m是循环的。例如(123, 312)是循环的,(123, 231)也是循环的,对于前者,你可以把末尾的3移动到12之前,从而得到312;对于后者,你可以把末尾的23移动到1之前,从而得到231。n和m的位数一定要相同,且他们都不会存在前置的0(指如01这样的数)。

现在给定正整数A、B(1<=A,B<=10000),求存在多少对循环的数(n, m),满足A<=n<m<=B。
输入
第一行一个整数N,代表有N组测试数据,接下来的N行每行第一个数为A,第二个数为B,空格分隔。
输出
N行,每行即为满足条件的循环的数对的个数。(若同一个数字n产生相了多个相同的循环数m,只算一个,如1212移动最后一个2得到2121,移动后三位也得到2121,则只计算一次2121)
提问者的代码My Code

#include<iostream>
#include<cstring>
#include<string.h>
#include<string>

using namespace std;
int main()
{
    int A, B, N, d1, c1, b1, a1, d2, c2, b2, a2; int x;
    cin >> N;
    int t[10001];
    memset(t, 0, sizeof(t));
    for (int i = 0; i < N; i++) {
        cin >> A >> B; x = 0;
        for (int n = A; n < B; n++) {

            for (int m = n + 1; m <= B; m++) {
                d1 = n / 1000; c1 = n / 100; b1 = n / 10; a1 = n - 1000 * d1 - 100 * c1 - 10 * b1;
                d2 = m / 1000; c2 = m / 100; b2 = m / 10; a2 = m - 1000 * d2 - 100 * c2 - 10 * b2;
                bool fg1 = (d1 == 0 && c1 == 0 && b1 != 0 && a1 != 0);
                bool fg2 = (d2 == 0 && c2 == 0 && b2 != 0 && a2 != 0), fg3 = (b1 == a2 && b2 == a1);
                bool fg4 = (d1 == 0 && c1 != 0),fg5 = (d2 == 0 && c2 != 0);
                bool flag1 = ((c1 == a2 && b1 == c2 && a1 == b2) || (c1 == b2 && b1 == a2 && a1 == c2));
                bool flag2 = ((d1 == a2 && c1 == d2 && b1 == c2 && a1 == b2) || (d1 == b2 && c1 == a2 && b1 == d2 && a1 == c2) || (d1 == c2 && c1 == b2 && b1 == a2 && a1 == d2));
                if (fg1) {
                    if (fg2 && fg3) { x++;  }
                    else;
                }
                else;
                if (fg4) {
                    if ( fg5 && flag1) { x++;  }
                    else;
                }
                else;
                if (d1 != 0) {
                    if (d2 != 0 && flag2) { x++;  }
                    else;
                }
                else;
            }
        }
        t[i] = x;
    }
    for (int j = 0; j < N; j++) {
        cout << t[j] << endl;
    }
}

问题
为什么有时对有时错

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-11-20 19:51
    关注

    这代码看着就头晕啊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月20日

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答