飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1988|回复: 6

[C/C++] 算法入门题-8月29日

[复制链接]
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-8-28 21:43:07 | 显示全部楼层 |阅读模式
    题目来源: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 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-28 21:45:31 | 显示全部楼层
    先顶后看
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2009-8-28 21:55:03 | 显示全部楼层

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

    7. #include <stdio.h>
    8. #define MAX 4

    9. int main(int argc, char **argv)
    10. {
    11.     int n,i;
    12.     int a[MAX];
    13.     scanf("%d", &n);
    14.     while(n--)
    15.     {
    16.         for (i = 0; i < MAX; ++i)
    17.             scanf("%d", &a[i]);
    18.         for (i = 0; i < MAX; ++i)
    19.             printf("%d ", a[i]);
    20.         if (a[1] - a[0] == a[3] - a[2])
    21.             printf("%d\n",a[3]*2 - a[2]);
    22.         else
    23.             printf("%d\n", a[3]*a[3]/a[2]);
    24.     }
    25.     return 0;
    26. }
    复制代码

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

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

    11. int main(int argc, char **argv)
    12. {
    13.     int i,j,n,t,s;
    14.     while(scanf("%d", &n) > 0)
    15.     {
    16.         t = j = s = 0;
    17.         while (n > 1)
    18.         {
    19.             for (i = 2; i <= n; ++i)
    20.             {
    21.                 t = 0;
    22.                 j = 0;
    23.                 while (mod(n,i) == 0)
    24.                 {
    25.                     n /= i;
    26.                     ++t;
    27.                     j = 1;
    28.                 }
    29.                 if (j)
    30.                 {
    31.                     if (s != 0)
    32.                         printf(" * %d", i);
    33.                     else
    34.                     {
    35.                         printf("%d", i);
    36.                         s = 1;
    37.                     }
    38.                     if (t >= 2)
    39.                         printf("^%d", t);
    40.                 }
    41.             }
    42.         }
    43.         printf("\n");
    44.     }
    45.    
    46.     return 0;
    47. }
    复制代码

    [ 本帖最后由 evilknight 于 2009-8-28 22:57 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-29 21:58:29 | 显示全部楼层
    今天的题我做的太烂了,第一题很代码漏洞多,第二题不会。
    第一题:
    #include "stdafx.h"
    #include <iostream.h>
    #include <stdio.h>
    #include <string.h>

    int main()
    {
            int t,num[2][5];
    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[i][j];
              if (num[i][j]>105)
              {
           cout<<"Wrong!"<<endl;
              }
             }
    }
    for ( i=0;i<t;i++)
    {
             //for (int j=0;j<5;j++)
             
                     if (num[i][1]-num[i][0]==num[i]

    [2]-num[i][1]&&num[i][2]-num[i][1]==num[i][3]-num

    [i][2])
                     {
                             num[i][4]=num[i][3]+(num

    [i][1]-num[i][0]);
                     }
                     if (num[i][1]/num[i][0]==num[i]

    [2]/num[i][1]&&num[i][2]/num[i][1]==num[i][3]/num

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

    }
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2009-8-29 22:04:40 | 显示全部楼层
    你的代码放在[code][/code]里吧
    第二题也挺简单的,先除2,一直到不能被2整除,这样的话,也决不可能可以给2的倍数整除的,再除了3,4,5等等!
    能给3整除的,也决不会给6的倍数整除,比如3!
    这样能理解不?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-29 22:46:31 | 显示全部楼层

    1. void fun(int base, int i_input)
    2. {
    3.     if(base > (int)sqrt(i_input))
    4.     {
    5.         cout<<" "<<i_input;
    6.         return;
    7.     }
    8.     if(0 == i_input % base)
    9.     {
    10.         cout<<" "<<base;
    11.         fun(base, i_input/base);
    12.     }
    13.     else
    14.     {
    15.         fun(base += (2 == base)? 1 : 2 , i_input);
    16.     }
    17. }

    18. int main(int argc, char* argv[])
    19. {
    20.     int i_input_num;
    21.     cout<<"请输入一个整数:"<<endl;
    22.     cin>>i_input_num;
    23.     cout<<"您输入的是:"<<i_input_num<<endl;
    24.     int base = 2;
    25.     fun(base, i_input_num);
    26.     cout<<endl;   
    27.         return 0;
    28. }

    复制代码
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2009-8-29 22:53:37 | 显示全部楼层

    1. 范例输入:
    2. 20
    3. 999997
    4. 范例输出 :
    5. 2^2 * 5
    6. 757 * 1321
    复制代码
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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