首页
社区
课程
招聘
[旧帖] [求助]有关c程序中 Runtime Error的问题 0.00雪花
发表于: 2011-4-3 23:43 1253

[旧帖] [求助]有关c程序中 Runtime Error的问题 0.00雪花

2011-4-3 23:43
1253
原题是:
鸽子和兔子一共有n个头和m只脚。请你写个程序计算一下一共有多少只鸽子和兔子。

Input
输入包括多组数据。 每行包括2个数据:n、m(代表上面题目中提到的意思1≤n, m≤230)。 n、m都是整数。 输入以0 0作为结束。

Output
每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。 如果输入的测试数据不能求得结果,那肯定是redraiment这个马大哈数错了,就输出"Error"提示他。

Sample Input
35 94 1 3 0 0
Sample Output
23 12 Error

我的解答:
#include "stdio.h"
#include "math.h"
main()
{
        int i,j,k,n,m,q;
        int a[100];
        int b[100];
        k=pow(2,30);
        for (i=0;;i++)
        {
                scanf("%d %d",&n,&m);
                a[i]=n;
                b[i]=m;
                if(n==0&&m==0)
                        break;
        }
        i=0;
        while ((a[i]!=0)&&(b[i]!=0))
        {
                n=0;
                for (j=1;j<=b[i];j++)
                        for(q=1;q<=a[i];q++)
                                if((q+j)==a[i]&&(2*q+4*j)==b[i])
                                {
                                        printf("%d %d\n",q,j);
                                        n=1;
                                }
                if (!n)
                {
                        printf ("Error\n");
                        n=0;
                }
                i++;
        }
}

在提交平台时会出现  Runtime Error  问题
希望  前辈可以指导一下  谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 345
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
oj吗,好像那种int a[100]的方法是不行的。另外那个k是干嘛的
2011-4-3 23:53
0
雪    币: 859
活跃值: (304)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
3
n、m(代表上面题目中提到的意思1≤n, m≤230)。
int a[100];
  int b[100];

STACK_OVERFLOW
2011-4-4 00:56
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
4
好囧~~

这种题要读取一组数据,就输出一组结果,测试数据绝对要多于100组,你那个数组必定要越界~~
2011-4-4 00:57
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我又运行了一次  发现如果数据太大的话执行会长时间   (因为用了两个循环)

这方面有好的解决办法吗?

还有就是怎么 输入一组数据 直接输出?   要满足题意呀
2011-4-4 10:23
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
6
#include <stdio.h>

int main()
{
    int m,n,tmp,ans;
    while(scanf("%d %d",&n,&m), n && m)
    {
        tmp = m - 2 * n;
        if(tmp < 0 || tmp % 2 == 1)
        {
            printf("Error\n");
            continue;
        }
        
        ans = tmp / 2;
        
        printf("%d %d\n", ans, n - ans);
    }
    return 0;
}
2011-4-4 10:44
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
算法上试试这么写呢,

  int tou,leg;
int gezi=0,tuzi=0;
scanf("%d %d",&tou,&leg);
tuzi=(leg-tou*2)/2;
gezi=tou-tuzi;
printf("tuzi=%d\ngezi=%d\n",tuzi,gezi);
2011-4-4 10:51
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
引用poj:Runtime Error         RE         The solution has caused an unhandled exception (as defined by the runtime environment) during execution.

要么动态分配内存吧,或者根据他给的情况,char类型就可以存放输入数据。150*230才占了34k不到。

for (j=1;j<=b[i];j++)
    for(q=1;q<=a[i];q++)
        if((q+j)==a[i]&&(2*q+4*j)==b[i])

这点我有点小不明白。q代表鸽子数,j代表兔子数,而a数组保存头数,b数组保存脚数。循环判断条件有点小诡异
2011-4-4 10:59
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
while(scanf("%d %d",&n,&m), n && m)
确实也没必要一下子全读进来。明显这才是做算法题的常规路子。
2011-4-4 11:03
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我是想头数最大也不会大过总头数吧
脚数也是这样
想着减少循环次数  可还是很麻烦  
2011-4-4 11:06
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
是啊  我才  刚刚接触  让各位见笑了  
有些处理技巧还不是很明白  
不过亏了 各位  真是感谢!
2011-4-4 11:09
0
游客
登录 | 注册 方可回帖
返回
//