evilknight 发表于 2009-8-28 21:43:07

算法入门题-8月29日

题目来源:http://zerojudge.tw/
第一题:来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1658
可以点上面的地址,上pku提交代码!
Eva 的回家作业
  Eva的家庭作业里有很多数列填空练习。填空练习的要求是:已知数列的前四项,填出第五项。因 为已经知道这些数列只可能是等差或等比数列,她决定写一个程式来完成这些练习。

输入说明:
第一行是数列的数目t(0 <= t <= 20)。 以下每行均包含四个整数,表示数列的前四项。 约定数列的前五项均为不大于105的自然数,等比数列的比值也是自然数。
输出说明:
对输入的每个数列,输出它的前五项。
范例输入:

2
1 2 3 4
1 2 4 8
范例输出 :
1 2 3 4 5
1 2 4 8 16

第二题:
因数分解
内容: 简体->正體
各位在国小时都学过因数分解,都瞭解怎么样用纸笔计算出结果,现在由你来敎电脑做因数分解。

因数分解就是把一个数字,切分为数个质数的乘积,如 12=2^2 * 3

其中, 次方的符号以 ^ 来表示



输入说明:
一个整数, 大于1 且 小于等于 1000000
输出说明:
一个字串
范例输入:

20
999997
范例输出 :
2^2 * 5
757 * 1321

[ 本帖最后由 evilknight 于 2009-8-29 22:53 编辑 ]

超然 发表于 2009-8-28 21:45:31

先顶后看

evilknight 发表于 2009-8-28 21:55:03


/******************************************************************************/
/*Problem: a005 "Eva 的回家作業" from POJ                                    */
/*Language: C                                                               */
/*Result: AC (10ms, 354KB) on ZeroJudge                                     */
/*Author: MicroQ at 2008-12-14 19:29:20                                     */
/******************************************************************************/

#include <stdio.h>
#define MAX 4

int main(int argc, char **argv)
{
    int n,i;
    int a;
    scanf("%d", &n);
    while(n--)
    {
      for (i = 0; i < MAX; ++i)
            scanf("%d", &a);
      for (i = 0; i < MAX; ++i)
            printf("%d ", a);
      if (a - a == a - a)
            printf("%d\n",a*2 - a);
      else
            printf("%d\n", a*a/a);
    }
    return 0;
}

/******************************************************************************/
/*Problem: a010 "因數分解"                                                   */
/*Language: C                                                               */
/*Result: AC (28ms, 352KB) on ZeroJudge                                     */
/*Author: MicroQ at 2008-12-15 00:22:44                                     */
/******************************************************************************/

#include <stdio.h>
#include <string.h>
#define mod(x,y) (x)-(x)/(y)*(y)
#define MAX 128

int main(int argc, char **argv)
{
    int i,j,n,t,s;
    while(scanf("%d", &n) > 0)
    {
      t = j = s = 0;
      while (n > 1)
      {
            for (i = 2; i <= n; ++i)
            {
                t = 0;
                j = 0;
                while (mod(n,i) == 0)
                {
                  n /= i;
                  ++t;
                  j = 1;
                }
                if (j)
                {
                  if (s != 0)
                        printf(" * %d", i);
                  else
                  {
                        printf("%d", i);
                        s = 1;
                  }
                  if (t >= 2)
                        printf("^%d", t);
                }
            }
      }
      printf("\n");
    }
   
    return 0;
}


[ 本帖最后由 evilknight 于 2009-8-28 22:57 编辑 ]

wmp1014 发表于 2009-8-29 21:58:29

今天的题我做的太烂了,第一题很代码漏洞多,第二题不会。
第一题:
#include "stdafx.h"
#include <iostream.h>
#include <stdio.h>
#include <string.h>

int main()
{
        int t,num;
cout<<"Input!"<<endl;
cin>>t;
cout<<"Input number!"<<endl;
for (int i=0;i<t;i++)
{
       for (int j=0;j<4;j++)
       {
      cin>>num;
          if (num>105)
          {
       cout<<"Wrong!"<<endl;
          }
       }
}
for ( i=0;i<t;i++)
{
       //for (int j=0;j<5;j++)
       
               if (num-num==num

-num&&num-num==num-num

)
               {
                       num=num+(num

-num);
               }
               if (num/num==num

/num&&num/num==num/num

)
               {
                       num=num*2;
               }
}
      for (i=0;i<t;i++)
      {
                  for (int j=0;j<5;j++)
                  {
                          printf("%d ",num);
            
                  }
         printf("\n");
      }
       
return 0;

}

evilknight 发表于 2009-8-29 22:04:40

你的代码放在里吧
第二题也挺简单的,先除2,一直到不能被2整除,这样的话,也决不可能可以给2的倍数整除的,再除了3,4,5等等!
能给3整除的,也决不会给6的倍数整除,比如3!
这样能理解不?

超然 发表于 2009-8-29 22:46:31


void fun(int base, int i_input)
{
    if(base > (int)sqrt(i_input))
    {
      cout<<" "<<i_input;
      return;
    }
    if(0 == i_input % base)
    {
      cout<<" "<<base;
      fun(base, i_input/base);
    }
    else
    {
      fun(base += (2 == base)? 1 : 2 , i_input);
    }
}

int main(int argc, char* argv[])
{
    int i_input_num;
    cout<<"请输入一个整数:"<<endl;
    cin>>i_input_num;
    cout<<"您输入的是:"<<i_input_num<<endl;
    int base = 2;
    fun(base, i_input_num);
    cout<<endl;   
        return 0;
}

evilknight 发表于 2009-8-29 22:53:37


范例输入:
20
999997
范例输出 :
2^2 * 5
757 * 1321
页: [1]
查看完整版本: 算法入门题-8月29日