如何解决限时超标问题?

时间:2020-06-22 20:36:06

标签: c

我必须做一个空心的菱形图案,上面满是星星。对于N的输入,应该使用空心菱​​形打印2 * N尺寸的网格。对于以下代码,我超出了时间限制。需要做什么?

Incident Identifier: 7A8E1E30-70BA-482D-A135-E67743F1A4BA
CrashReporter Key:   e7ee2942556381a1f0080313b3dc1a75729c6a48
Hardware Model:      iPhone12,5
Process:             AppName [15439]
Path:                /private/var/containers/Bundle/Application/5886549A-F2CB-4FFB-A227-6BBD5C220630/AppName.app/AppName
Identifier:          com.company.app
Version:             5.04 (5.00)
AppStoreTools:       11E608a
AppVariant:          1:iPhone12,5:13
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.company.app [4044]


Date/Time:           2020-06-22 05:41:30.6832 -0400
Launch Time:         2020-06-22 05:38:03.9046 -0400
OS Version:          iPhone OS 13.5.1 (17F80)
Release Type:        User
Baseband Version:    1.06.00
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x18d7fc300 __exceptionPreprocess + 228 (NSException.m:199)
1   libobjc.A.dylib                 0x18d510c1c objc_exception_throw + 60 (objc-exception.mm:565)
2   NativeScript                    0x1056e6e00 NativeScript::reportFatalErrorBeforeShutdown(JSC::ExecState*, JSC::Exception*, bool) + 1528
3   NativeScript                    0x10572102c NativeScript::FFICallback<NativeScript::ObjCMethodCallback>::ffiClosureCallback(ffi_cif*, void*, void**, void*) + 120
4   NativeScript                    0x10628e768 ffi_closure_SYSV_inner + 996
5   NativeScript                    0x1062901b4 .Ldo_closure + 20
6   CoreFoundation                  0x18d754474 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 28 (CFNotificationCenter.c:787)
7   CoreFoundation                  0x18d7544c4 ___CFXRegistrationPost1_block_invoke + 68 (CFNotificationCenter.c:175)
8   CoreFoundation                  0x18d7537b4 _CFXRegistrationPost1 + 396 (CFNotificationCenter.c:198)
9   CoreFoundation                  0x18d753468 ___CFXNotificationPost_block_invoke + 92 (CFNotificationCenter.c:1371)
10  CoreFoundation                  0x18d6cc928 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1420 (CFXNotificationRegistrarOld.m:168)
11  CoreFoundation                  0x18d752da8 _CFXNotificationPost + 1260 (CFNotificationCenter.c:1359)
12  Foundation                      0x18dab939c -[NSNotificationCenter postNotificationName:object:userInfo:] + 64 (NSNotification.m:576)
13  UIKitCore                       0x19194aabc -[UIApplication _terminateWithStatus:] + 304 (UIApplication.m:6719)
14  UIKitCore                       0x1910b3718 -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 128 (_UISceneLifecycleMultiplexer.m:765)
15  UIKitCore                       0x1910b337c -[_UISceneLifecycleMultiplexer forceExitWithTransitionContext:scene:] + 220 (_UISceneLifecycleMultiplexer.m:418)
16  UIKitCore                       0x191940ac4 -[UIApplication workspaceShouldExit:withTransitionContext:] + 216 (UIApplication.m:3725)
17  FrontBoardServices              0x192a57cf8 -[FBSUIApplicationWorkspaceShim workspaceShouldExit:withTransitionContext:] + 88 (FBSUIApplicationWorkspace.m:144)
18  FrontBoardServices              0x192a84d68 __83-[FBSWorkspaceScenesClient willTerminateWithTransitionContext:withAcknowledgement:]_block_invoke_2 + 80 (FBSWorkspaceScenesClient.m:281)
19  FrontBoardServices              0x192a69ebc -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 240 (FBSWorkspace.m:357)
20  FrontBoardServices              0x192a84cf4 __83-[FBSWorkspaceScenesClient willTerminateWithTransitionContext:withAcknowledgement:]_block_invoke + 140 (FBSWorkspaceScenesClient.m:278)
21  libdispatch.dylib               0x18d49c33c _dispatch_client_callout + 20 (object.m:495)
22  libdispatch.dylib               0x18d49f0d4 _dispatch_block_invoke_direct + 264 (queue.c:466)
23  FrontBoardServices              0x192aab6c4 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 48 (FBSSerialQueue.m:173)
24  FrontBoardServices              0x192aab370 -[FBSSerialQueue _queue_performNextIfPossible] + 432 (FBSSerialQueue.m:216)
25  FrontBoardServices              0x192aab8dc -[FBSSerialQueue _performNextFromRunLoopSource] + 32 (FBSSerialQueue.m:247)
26  CoreFoundation                  0x18d777af4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 (CFRunLoop.c:1922)
27  CoreFoundation                  0x18d777a48 __CFRunLoopDoSource0 + 84 (CFRunLoop.c:1956)
28  CoreFoundation                  0x18d777198 __CFRunLoopDoSources0 + 196 (CFRunLoop.c:1992)
29  CoreFoundation                  0x18d771f38 __CFRunLoopRun + 796 (CFRunLoop.c:2882)
30  CoreFoundation                  0x18d7718f4 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3192)
31  GraphicsServices                0x197b88604 GSEventRunModal + 164 (GSEvent.c:2246)
32  UIKitCore                       0x191945358 UIApplicationMain + 1944 (UIApplication.m:4823)
33  NativeScript                    0x106290044 ffi_call_SYSV + 68
34  NativeScript                    0x10628de8c ffi_call_int + 1272
35  NativeScript                    0x10628d988 ffi_call + 56
36  NativeScript                    0x1056a946c NativeScript::FunctionWrapper::call(JSC::ExecState*) + 596
37  NativeScript                    0x10625ac60 0x1056a0000 + 12299360
38  NativeScript                    0x106258078 0x1056a0000 + 12288120
39  NativeScript                    0x106258078 0x1056a0000 + 12288120
40  NativeScript                    0x106258078 0x1056a0000 + 12288120

...

2 个答案:

答案 0 :(得分:0)

您的代码进入无限循环。您的代码有两个明显的缺陷。您有一个外部循环-for(row=1;row<=n;row++),然后在其中一个内部循环中更改了行变量-

for(col=n;col>=row;row--)

col肯定大于row,并且您继续递减行,这意味着col>=row条件始终求值为True。这将使您的代码进入无限循环。只需将其更改为-for(col=n;col>=row;col--),即可防止您的程序进入无限循环。

菱形图案的后半部分也存在一些逻辑错误。您的第一个循环工作正常,但是由于空间较大,代码在较低的循环中会产生轻微的未对齐结果。

我已更正了下半部分打印的空格,这将为您提供正确的结果-

#include <stdio.h>

int main() 
{
    int row,col,space,n;
    scanf("%d",&n);
    for(row=1;row<=n;row++)
    {
        for(col=n;col>=row;col--)
        {
            printf("*");
        }
        for(space=2;space<(2*row)-1;space++)
        {
            printf(" ");
        }
        if (row==1)
        printf("\b");
        for(col=n;col>=row;col--)  // <-- Changed here from row--, to col--
        {
            printf("*");
        }
        printf("\n");
    }
   
    for(row=n-1;row>=1;row--)
        {
            for(col=n;col>=row;col--)
            {
                printf("*");
            }
            // Note the changes below in the number of spaces printed
            for(space=1;space<(2*(row-1));space++)
            {
                printf(" ");
            }
            if (row==1)
            printf("\b");
            for(col=n;col>=row;col--)  // <-- Changed here from row--, to col--
            {
            printf("*");
            }
        printf("\n");
        }
    getchar();
    return 0;
} 

这将打印正确的菱形图案

答案 1 :(得分:0)

在此代码中:

for(col=n;col>=row;row--)
{
    printf("*");
}

coln开始,由于先前的代码,该值必须大于或等于row,因此col>=row为true。随后,此循环将row减少row--。这会使row变小,因此col>=row保持为真,并且循环继续执行。

这种情况一直持续到row--导致溢出(该值超出int可以代表的范围)为止,此时行为未由C标准定义。