ACM常见题型个人解法

  • 格式:doc
  • 大小:41.00 KB
  • 文档页数:6

求最值
时间限制(普通/Java) : 1000 MS/3000 MS运行内存限制: 65536 KByte
总提交: 9915 测试通过: 2804
比赛描述
给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值。

输入
多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空格隔开。

输出
对每组数据输出一行,包含两个整数,用一个空格隔开,分别表示N个数中的最大值和最小值
样例输入
5
4 6 7 3 1
4
4 3
5 1
样例输出
7 1
5 1
#include <stdio.h>
int main()
{
int str[101];
int i,n;
for(;scanf("%d",&n)==1;)
{
int max=-1;
int min=101;
if(0<=n&&n<=100)
{
for(i=0;i<n;i++)
{
scanf("%d",&str[i]);
max=max>str[i]?max:str[i];
min=min<str[i]?min:str[i];
}
}
printf("%d %d\n",max,min);
}
return 0;
}
斐波那契数列
时间限制(普通/Java) : 1000 MS/10000 MS运行内存限制: 65536 KByte
总提交: 6917 测试通过: 2394
比赛描述
在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义:
F
= 0
= 1
F
1
F n = F n - 1 + F n - 2
用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就由之前的两数相加。

首几个斐波那契数是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,………………
特别指出:0不是第一项,而是第零项。

在西方,最先研究这个数列的人是比萨的列奥纳多(又名斐波那契),他描述兔子生长的数目时用上了这数列。

⏹ 第一个月有一对刚诞生的兔子
⏹ 第两个月之后它们可以生育
⏹ 每月每对可生育的兔子会诞生下一对新兔子
⏹ 兔子永不死去
假设在n 月有新生及可生育的兔子总共a 对,n+1月就总共有b 对。

在n+2月必定总共有a+b 对:因为在n+2月的时候,所有在n 月就已存在的a 对兔子皆已可以生育并诞下a 对后代;同时在前一月(n+1月)之b 对兔子中,在当月属于新诞生的兔子尚不能生育。

现请以较短的时间,求出斐波那契数列第n 项数值,0≤n ≤40。

输入
斐波那契数列项数n ,0≤n ≤40。

输出
斐波那契数列第n项数值
样例输入
4
样例输出
3
#include <stdio.h>
const int n=40;
int main()
{
int i,m;int str[n];
str[0]=0;str[1]=1;
scanf("%d",&m);
switch(m)
{
case 0:printf("%d",str[0]);break;
case 1:printf("%d",str[1]);break;
default:
for(i=2;i<=m;i++)
{
str[i]=str[i-1]+str[i-2];
}
printf("%d\n",str[m]);
}
return 0;
}
完美立方
时间限制(普通/Java) : 1000 MS/3000 MS运行内存限制: 65536 KByte
总提交: 5492 测试通过: 1440
比赛描述
a3 = b3 + c3 + d3为完美立方等式。

例如123 = 63 + 83 + 103。

编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中1<a, b, c, d ≤N。

输入
正整数N (N≤100)
输出
每行输出一个完美立方,按照a的值,从小到大依次输出。

当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。

样例输入
24
样例输出
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)
#include <stdio.h>
#include <math.h>
void Cube(int n);
int main()
{
int N,m;
scanf("%d",&N);
for(m=1;m<=N;m++)
{
Cube(m);
}
return 0;
}
void Cube(int n)
{
int i,j,k;
double a,a1,b,c;
a=pow(n,3);
for(i=2;i<n;i++)
{
b=pow(i,3);
for(j=i;j<n;j++)
{
c=pow(j,3);
for(k=j;k<n;k++)
{
a1=b+c+pow(k,3);
if(a1==a)
printf("Cube = %d, Triple = (%d,%d,%d)\n",n,i,j,k);
}
}
}
}。