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 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面