标题:能帮我看一下,我的代码错在哪里了,运行结果是对的,拿去OJ网站上提交的时 ...
只看楼主
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
结帖率:100%
 问题点数:0 回复次数:6 
能帮我看一下,我的代码错在哪里了,运行结果是对的,拿去OJ网站上提交的时候是错的,和正确代码有怎么区别?
题目:

我的错误代码:
程序代码:
#include<iostream>
using namespace std;
const int arr[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 };
void sum() {
    int a, b;
    cin >> a;
    cin >> b;
    if (a < b) {
        cout << arr[b + 1] << endl;
    }
    else if(a>b){
        cout << arr[a + 1 ] << endl;
    }
}
int main() {
    int n;
    cin >> n;
    while (n--) {
        sum();
    }
    cout << endl;
    return 0;
}

运行结果:


正确代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
const int A[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1 };
int T;
int a, b;


int main(void)
{
    scanf("%d", &T);
    while (T--)
    {
        scanf("%d%d", &a, &b);
        for (int i = 0;; ++i)
        {
            if (A[i] == a && A[i + 1] == b)
            {
                printf("%d\n", A[i + 2]);
                break;
            }
        }
    }
    return 0;
}


[此贴子已经被作者于2021-10-20 16:41编辑过]

搜索更多相关主题的帖子: int 结果 cin 代码 运行 
2021-10-20 16:30
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
这个数列有循环周期,可以理解为一个环。
你这代码如果输入2,那么他定到位arr中的哪一个2呢?,而如果输入1 0又该输出多少呢?
仔细对比一些它的数组和你的数组有啥不同的地方

其实题目也没说必须要用数组的。
程序代码:
#include <iostream>
using namespace std;

int main()
{
    int T;
    cin >> T;

    int a, b, flag;

    while (T--)
    {
        cin >> a >> b;

        if (a < b)
        {
            flag = (b == 15) ? -1 : 1;
        }
        if (a > b)
        {
            flag = (b == 0) ? 1 : -1;
        }
        cout << b + flag << endl;
    }

    return 0;
}



[此贴子已经被作者于2021-10-20 23:54编辑过]

2021-10-20 22:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
我来说个题外话
你的代码正确与否,要测试呀,口说无凭
既然数组是 { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 }
那边界点你肯定需要测试到,比如,
    输入 0, 1 看看结果是不是 2
    输入 14, 15 看看结果是不是 14
    输入 15, 14 看看结果是不是 13
    输入 2, 1 看看结果是不是 0
    输入 1, 0 看看结果是不是 1


当然,也可以写个测试模块,比如
程序代码:
#include <stdio.h>

int 莫启飞( int a, int b )
{
    static const int arr[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 };

    if( a < b )
        return arr[b+1];
    return arr[a+1];
}

int apull( int a, int b )
{
    int flag;
    if( a < b )
        flag = (b == 15) ? -1 : 1;
    else
        flag = (b == 0) ? 1 : -1;
    return b + flag;
}

int 某甲( int a, int b )
{
    int c = b - a + b;
    if( c > 15 )
        return 14;
    if( c < 0 )
        return 1;
    return c;
}

int 某乙( int a, int b )
{
    return b+1-((a-b+1)/2*30+(b-a)*b)%30/15*2;
}

#include <utility>

int main(void)
{
    std::pair<const char*,int (*)(int,int)> funs[] = { {"莫启飞",莫启飞}
                                                     , {"apull",apull}
                                                     , {"某甲",某甲}
                                                     , {"某乙",某乙} };
    for( auto fun : funs )
    {
        bool passed = true;
        const int arr[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 };
        for( size_t i=0; i!=30; ++i )
        {
            int a = arr[i];
            int b = arr[(i+1)%30];
            int c = arr[(i+2)%30];
            int result = fun.second( a, b );

            if( result != c )
            {
                printf( "     f(%d,%d) = %d, 但你计算出的结果却是 %d\n", a, b, c, result );
                passed = false;
            }
        }
        printf( "--- %s 测试%s ---\n", fun.first, passed?"通过":"失败" );
    }
}


输出
     f(15,14) = 13, 但你计算出的结果却是 14
     f(14,13) = 12, 但你计算出的结果却是 15
     f(13,12) = 11, 但你计算出的结果却是 14
     f(12,11) = 10, 但你计算出的结果却是 13
     f(11,10) = 9, 但你计算出的结果却是 12
     f(10,9) = 8, 但你计算出的结果却是 11
     f(9,8) = 7, 但你计算出的结果却是 10
     f(8,7) = 6, 但你计算出的结果却是 9
     f(7,6) = 5, 但你计算出的结果却是 8
     f(6,5) = 4, 但你计算出的结果却是 7
     f(5,4) = 3, 但你计算出的结果却是 6
     f(4,3) = 2, 但你计算出的结果却是 5
     f(3,2) = 1, 但你计算出的结果却是 4
     f(2,1) = 0, 但你计算出的结果却是 3
     f(1,0) = 1, 但你计算出的结果却是 2
--- 莫启飞 测试失败 ---
--- apull 测试通过 ---
--- 某甲 测试通过 ---
--- 某乙 测试通过 ---
2021-10-21 10:03
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 2楼 apull
感谢大佬懂了
2021-10-23 19:27
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 3楼 rjsp
嗯嗯明白了,谢谢您
2021-10-23 19:29
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 2楼 apull
真的谢谢,您了,之前遇到这种题只会用数组,现在用三目运算符简单多了
2021-10-23 20:02
莫启飞
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2021-10-13
得分:0 
回复 3楼 rjsp
太感谢您了,您的讲解很细致,我回去看以后终于知道我错在哪里了,还学会了用您的测试模块,编程中国这个论坛,简直对小白太友好了哭哭
2021-10-23 20:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507238-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.453074 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved