OpenJudge 计算概论(A) / B02 基础练习题(2)5道题目

1:苹果和虫子
题目来源:http://pkuic.openjudge.cn/hw02/1/
能列出数学等式就能求解,非常简单。

#include<iostream>
using namespace std;

int main()
{
    int n,x,y;//n apple, x apple/hour, eat y hour
    cin>>n>>x>>y;

    if(y%x==0)
        cout<<n-y/x<<endl;
    else
        cout<<n-y/x-1<<endl;
    return 0;
}

2:大象喝水
题目来源:http://pkuic.openjudge.cn/hw02/2/

#include<iostream>
using namespace std;
#define Pi 3.14159
#define need 20000  //大象需要喝的水
int main()
{
	int h,r;// the height and radius of bucket
	cin>>h>>r;
	double volume=Pi * r * r * h;
	cout<<int(need/volume)+1<<endl;
	return 0;
}

3:最高的分数
题目来源:http://pkuic.openjudge.cn/hw02/3/

#include<iostream>
using namespace std;
int main()
{
    int n;//the number of score
    cin>>n;
    int score[100];//student's score
    for(int i=0;i<n;i++)
        cin>>score[i];

    //scan array from begin to end, reserve the biggest score
    int Max=0;
    for(int i=0;i<n;i++)
    {
        if(score[i]>Max)
            Max=score[i];
    }
    cout<<Max;
    return 0;
}

4:最大奇数与最小偶数之差的绝对值
题目来源:http://pkuic.openjudge.cn/hw02/4/
通过遍历数组,先把最大奇数和最小偶数找出来,然后求差的绝对值即可。

#include<iostream>
#include<cmath>
#define n 6
#define inf 0x7ffffff
using namespace std;

/*int Abs(int a,int b)
{
    if(a>b)
        return a-b;
    else
        return b-a;
}*/
int main()
{
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    int oddMax=0;
    int evenMin=inf;

    for(int i=0;i<n;i++)
    {
        if(a[i]%2==0)
            evenMin=(a[i]<evenMin)?a[i]:evenMin;
        else
            oddMax=(a[i]>oddMax)?a[i]:oddMax;
    }
    cout<<abs(evenMin-oddMax);

    return 0;
}

5:分离整数的各个数位
题目来源:http://pkuic.openjudge.cn/hw02/5/
法一:通过取余,可以将一个数的末位分离出来。对一个数从个位开始,一直分离到最高位,每一位到保存在数组中。因为要求是从高位输出,因此数组逆序输出即可。

法二:通过递归实现,见下面第二个代码。

//方法一
#include<iostream>
using namespace std;
#define n 3
int main()
{
    int num;
    cin>>num;
    int arr[n],tmp=num;
    int j=0;//arry's index
    while(tmp>0){
        arr[j]=tmp%10;   //不能直接用j++,不知道为什么
        tmp=tmp/10;
        j++;
    }

    for(int i=j-1;i>0;i--)
        cout<<arr[i]<<endl;
    cout<<arr[0];
    return 0;
}

方法二
#include<iostream>
using namespace std;
void seperate(int num)
{
    int tmp=num;
    if(tmp!=0)//这不能用while
    {
        seperate(tmp/10);
        cout<<tmp%10<<endl;
    }
}
int main()
{
    int number;
    cin>>number;
    seperate(number);

    return 0;
}

在这里插入图片描述
上面的是递归实现的判定结果,下面是普通循环。大致可以看出,用递归能够使代码变得比较简短,但是运行时间会增加。这也是递归的一个普遍问题,设置不好还可能成为死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值