算法入门题-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 编辑 ] 先顶后看
/******************************************************************************/
/*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 编辑 ] 今天的题我做的太烂了,第一题很代码漏洞多,第二题不会。
第一题:
#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;
} 你的代码放在里吧
第二题也挺简单的,先除2,一直到不能被2整除,这样的话,也决不可能可以给2的倍数整除的,再除了3,4,5等等!
能给3整除的,也决不会给6的倍数整除,比如3!
这样能理解不?
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;
}
范例输入:
20
999997
范例输出 :
2^2 * 5
757 * 1321
页:
[1]