论坛: 编程破解 标题: 找些小题给大家做做,高手就别来了 复制本贴地址    
作者: kert_t8 [kert_t8]    论坛用户   登录
给定正整数n,求奇数o和正整数p使得 n=o*(2^p) 成立
(n<1,000,000)

例子:
n=24, o=3, p=3

====================================

好久没来了,整点儿这个算是做点贡献吧。题目来自波兰ACM预选赛。答案稍后公布
还有一些别的题,还没来的及看,看了再拿来

地主 发表时间: 06-08-17 18:18

回复: kert_t8 [kert_t8]   论坛用户   登录
预选赛练习题

特此更正

B1层 发表时间: 06-08-17 18:19

回复: xiaoshi [xiaoshi]   论坛用户   登录
for (n=1;n<1000000;n++)
      {  p=n;
          o=n;
        if ((o%2) != 0) &&((p%2) == 0) && (n == (o * (pow (2,p))))
            {
              printf("n=%d , o=%d ,p=%d ,\n" ,n,o,p );
              }
         
      }


************************************

没环境实验,瞎写的,都不知道对不对



[此贴被 零下一度(xiaoshi) 在 08月18日11时36分 编辑过]

B2层 发表时间: 06-08-18 11:36

回复: kert_t8 [kert_t8]   论坛用户   登录
这个肯定不对,例子都通不过
例子里面 p=3,在你的程序里头肯定出不来,还有,你的程序o==p

pow(x,y)就是计算x^y是不?

我发现可能是我题目没说清楚,再解释一下
给定,就是说有一个输入。在原题上面实际上是一个文件,里面有很多组数据,但是文件有格式,我简化了这一步,不需要从文件输入,只需要用scanf()就可以。
还有,可以证明,对于任意正整数n,满足条件的o和p是一定存在的,但o和p不一定相等

其实就是除2,除到不能除,用位移操作可能会有助于效率。



这个题暂时不很难,但是后面有些题我已经看了,很有意思,吊吊大家胃口吧

B3层 发表时间: 06-08-18 17:36

回复: radom [f_h]   论坛用户   登录
楼主的,自己怕也弄错了题意吧。。
printf("%d",3*(2^3))

result=3 not 24!

代码:


#include "stdio.h"
#include "math.h"
main()
{
    int n,
        o,
        p;
    printf("\n");
    do
      {
          scanf("\n\t%d",&n);
      }while(n<0);
    for(o=1;o<=1000;o+=2)
      for(p=1;p<=1000;p++)
      {

if((o*pow(2,p))==n)
{

          printf("\n\t%d,%d,%d",n,o,p);
  goto L1;
}

    }
L1:    getch();

}





[此贴被 radom(f_h) 在 08月21日20时52分 编辑过]

B4层 发表时间: 06-08-18 23:41

回复: kert_t8 [kert_t8]   论坛用户   登录
2^3=8
3*8=24

难道^不是指数运算符?




给个标准答案

代码:

#include <stdio.h>

int main() {
  int d, i, n, p;
  scanf("%d", &d);
  for (i = 0; i < d; i++) {
    scanf("%d", &n);
    p = 0;
    while (n % 2 == 0) {
      p++;
      n/=2;
    }
    printf("%d %d\n", n, p);
  }
  return 0;
}




B5层 发表时间: 06-08-20 13:01

回复: kert_t8 [kert_t8]   论坛用户   登录
第二个题

Alice 画了一个任意凸 n边形,然后随意的给n边形的n个顶点标上1-n的号码,然后再在n边形内部画任意多条不相交的对角线(对角线在n边形内部不相交,但相交于顶点),然后Alice提供一组数据,这组数据提供了这些边和对角线的信息,然后希望我们通过这一组数据给出按照顺时针/逆时针(无所谓,但一定要同一方向)顺序排列的定点号码

例如,对于四边形
(1) +---+ (2)
      |  \  |
(3) +---+ (4)
我们有边 (1,2) (2,4), (4,3), (3,1)以及对角线(1,4)
因此输入数据就是:
(1,2) (2,4), (3,1), (1,4), (4,3)
(注意:边是无向的,也就说(1,2)和(2,1)是一样的,另外,边和对角线是在一起的,给出的线不知道哪条是对角线哪条是边)
对于上面的输入,输出就应该是 1,2,4,3 或者 1,3,4,2

  点击这里下载英文原版题目  


[此贴被 月之御者(kert_t8) 在 08月20日13时19分 编辑过]


[此贴被 月之御者(kert_t8) 在 08月20日13时19分 编辑过]


[此贴被 月之御者(kert_t8) 在 08月20日13时20分 编辑过]

B6层 发表时间: 06-08-20 13:14

回复: kert_t8 [kert_t8]   论坛用户   登录
服了,反正用字符画不好图,大家理解个意思就行了,要是我没说清楚就去下载原版的题目看看,唉

B7层 发表时间: 06-08-20 13:20

回复: radom [f_h]   论坛用户   登录
你认为 2^3=8 这等式成立?

B8层 发表时间: 06-08-20 13:44

回复: xiaoshi [xiaoshi]   论坛用户   登录
哇,画图就不看了,那个会死人的,看下一个了。

B9层 发表时间: 06-08-21 00:14

回复: kert_t8 [kert_t8]   论坛用户   登录
引用:
C语言中没有指数运算符!x^y是其他语言中表示指数运算的方法,在C中,^是异或运算符。



.....
我用^是表示指数运算的

B10层 发表时间: 06-08-21 09:20

回复: kert_t8 [kert_t8]   论坛用户   登录
图示帮助大家理解题意的,不是说要画图

B11层 发表时间: 06-08-21 09:20

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号