鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: honhon

一道竞赛题,想了两天无果,虽然考试结束,我还是希望得到指点

[复制链接]
发表于 2016-12-17 18:50:47 | 显示全部楼层

你这个只判断了能不能在这个字符串里找到一个素数,而不是能不能划分成几个素数。你的代码只要再改一改也可以的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 20:23:22 | 显示全部楼层
小山童鞋 发表于 2016-12-17 18:50
你这个只判断了能不能在这个字符串里找到一个素数,而不是能不能划分成几个素数。你的代码只要再改一改也 ...

谢谢,我完全理解错题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 21:12:05 | 显示全部楼层
人造人 发表于 2016-12-17 20:23
谢谢,我完全理解错题了

也是碰巧最近在练习这种搜索的题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-17 22:48:51 | 显示全部楼层
小山童鞋 发表于 2016-12-17 18:39
我也是ACM的,大一的,创个帐号应该能提交的。。。。

下面的代码如果提交不能AC那我再改改。。

好厉害,同样大一,差别怎么这么大。。。。你高中就玩编程了码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 23:42:03 | 显示全部楼层
honhon 发表于 2016-12-17 22:48
好厉害,同样大一,差别怎么这么大。。。。你高中就玩编程了码

hhhh,只是最近刚弄懂这种搜索题的套路。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-17 23:43:14 | 显示全部楼层
honhon 发表于 2016-12-17 22:48
好厉害,同样大一,差别怎么这么大。。。。你高中就玩编程了码

话说,能AC吗?不能的话我再改改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-17 23:52:12 | 显示全部楼层
小山童鞋 发表于 2016-12-17 23:43
话说,能AC吗?不能的话我再改改。

不行,报超时了,我用100009试要1+秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-17 23:54:22 | 显示全部楼层
honhon 发表于 2016-12-17 23:52
不行,报超时了,我用100009试要1+秒

应该是如果素数是六位数就会超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-18 00:22:10 | 显示全部楼层
小山童鞋 发表于 2016-12-17 18:39
我也是ACM的,大一的,创个帐号应该能提交的。。。。

下面的代码如果提交不能AC那我再改改。。

学校oj账号是学校给的学号,没办法自己创建。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-18 21:17:16 | 显示全部楼层
honhon 发表于 2016-12-17 23:52
不行,报超时了,我用100009试要1+秒

没问题啊秒出结果啊…………………………
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-18 21:27:44 | 显示全部楼层
小山童鞋 发表于 2016-12-18 21:17
没问题啊秒出结果啊…………………………

/*有可能这样一种情况:很多次的调用字符转换成数字的函数,不然我也不知道了,参考你的素数表的方法,我也写了一个,AC了*/
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define MAX 1000001

  5. char s[50];
  6. char a[MAX];
  7. int maxlen;
  8. void deal()
  9. {
  10.     int i,j;
  11.     a[0] = a[1] = '0';
  12.     for (i = 2; i <= MAX-1; i++) a[i] = '1';
  13.     for (i = 2; i <= MAX-1; i++)
  14.       if (a[i] == '1')
  15.         for (j = 2; i*j <= MAX-1; j++)
  16.           a[i*j] = '0';
  17. }

  18. void work(int head, int len, int tot)
  19. {
  20.     int num = 0, i;
  21.     num = tot*10;
  22.     num += s[head+len-1]-48;
  23.     if (head == 0 && len == 6 && a[num] == '0') {printf("NO"); exit(0);}
  24.     if (head + len == maxlen && a[num] == '1') {printf("YES"); exit(0);}
  25.     if (a[num] == '1') work(head+len, 1, 0);
  26.     if (head+len != maxlen && head+len+1 <= maxlen && len+1 <= 6)
  27.       work(head, len+1, num);

  28.     return;
  29. }

  30. int main()
  31. {
  32.     deal();
  33.     gets(s);
  34.     maxlen = strlen(s);
  35.     work(0, 1, 0);
  36.     printf("NO\n");

  37.     return 0;
  38. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-19 10:19:26 | 显示全部楼层
honhon 发表于 2016-12-18 21:27
/*有可能这样一种情况:很多次的调用字符转换成数字的函数,不然我也不知道了,参考你的素数表的方法,我 ...

看不太懂你的代码。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-19 15:58:16 | 显示全部楼层
小山童鞋 发表于 2016-12-19 10:19
看不太懂你的代码。。。。

写得太乱,具体思路是递归递归,中途满足条件就中断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 15:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表