2014秋C++第17周 OJ题目及参考

课程主页在 http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在 云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 


A. 3数求平均

Description

输入3个整数,输出它们的平均值,保留3位小数

Input

3个整数

Output

3数的平均值,要求输出3位小数

Sample Input

3 5 2

Sample Output

3.333

HINT

#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
    int a, b, c;
    double x;
    cin>>a>>b>>c;
    x=(a+b+c)/3.0;
    cout<<setiosflags(ios::fixed)<<setprecision(3)<<x<<endl;
    return 0;
}


B. 买就打折,不买打骨折

Description

新年到了,商场狂打折。一件衣服x元,消费满y元,可打八五折。输入购买衣服的件数n,输出需要支付的金额(元),保留两位小数。

Input

衣服单价x(元),打折的最低消费y(元),购买衣服的件数n

Output

输出需要支付的金额(元),保留两位小数。

Sample Input

95.5 300 5

Sample Output

405.88

HINT

#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
    double x, y, s;
    int n;
    cin>>x>>y>>n;
    s = x * n;
    if(s>y)
        s*=0.85;
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<s<<endl;
    return 0;
}

 

C. 奇偶各几何?

Description

输入若干个整数,统计并输出其中的奇数、偶数分别有几个

Input

若干个整数,个数不定

Output

这些整数中奇数和偶数的个数

Sample Input

11 42 45 67 12 78 34

Sample Output

3 4

HINT

用下面的循环,当输入结束时,循环结束。键盘输入数据时, 需要用CTRL-Z结束

    while(cin>>n)
    {
      ……
    }

参考解答:

#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
    int odd=0, even=0;
    int n;
    while(cin>>n)
    {
        if(n%2==0)
            even++;
        else
            odd++;
    }
    cout<<odd<<" "<<even<<endl;
    return 0;
}
 


D. 函数求值

Description

给定的程序用来计算sum=f(0)+f(1)+...+f(n),其中,f(x)=x2+1。输入xn,输出sum的值。请将下面的程序补充完整:

#include <iostream>
using namespace std;
int sum(int n);
int f(int x);
int main( )
{
    int n;
    cin>>n;
    cout<<sum(n)<<endl;
    return 0;
}
/*只提交下面的程序*/
int sum(int n)
{
    int x, ____(1)______;
    for(x=0;____(2)____; x++)
        ______(3);
    return s;
}

_____(4)_________
{
    return x*x+1;
}

Input

n的值,一个整数

Output

sum=f(0)+f(1)+...+f(n),一个整数

Sample Input

4

Sample Output

35

HINT

#include <iostream>
using namespace std;
int sum(int n);
int f(int x);
int main( )
{
    int n;
    cin>>n;
    cout<<sum(n)<<endl;
    return 0;
}
/*只提交下面的程序*/
int sum(int n)
{
    int x, s=0;
    for(x=0; x<=n; x++)
        s+=f(x);
    return s;
}
 
int f(int x)
{
    return x*x+1;
}


 

E. 重复字符串

Description

输入一个字符串,将其重复若干次,例如,输入goal5,得到的就是球迷的欢呼:goalgoalgoalgoalgoal

不急着欢呼,先补充完整下面的程序。还需要注意的是,给出的程序段中,还藏着一个小Bug,需要你将其改过来。

#include <iostream>
#include <cstdio>
using namespace std;
void strcopy(char*,char*,int);
int main( )
{
     char str1[80];
     char str2[80];
     int n;
     gets(str1);
     cin>>n;
     strcopy(str2,str1,4);
     cout<<str2<<endl;
     return 0;
}

Input

一个待重复的字符串
重复的次数

Output

重复后的文字

Sample Input

goal 5

Sample Output

goalgoalgoalgoalgoal

HINT

#include <iostream>
#include <cstdio>
using namespace std;
void strcopy(char*,char*,int);
int main( )
{
    char str1[80];
    char str2[80];
    int n;
    gets(str1);
    cin>>n;
    strcopy(str2,str1,n);  //这儿有改动
    cout<<str2<<endl;
    return 0;
}
 
void strcopy(char *s1, char *s2, int n)
{
    int i,j=0,k;
    for(i=0;i<n;i++)
    {
        k=0;
        while(s2[k]!='\0')
            s1[j++] = s2[k++];
    }
    s1[j]='\0';
    return;
}

 

F. 用数字造数字

Description

输入一个3位以上的整数,求其中最大的数字最小的数字之间的差。例如:输入8729,输出7(即9-2=7),再如,输入24825,输出6(即8-2=6)。

Input

一个3位以上的整数

Output

输入整数的最大的数字最小的数字之间的差。

Sample Input

8729

Sample Output

7

HINT

可以在分离各数字过程中找最大、最小数字,也可以先将分离好的数字存储在数组中,再从数组中找出最大最小值。

#include <iostream>
using namespace std;
int main( )
{
    int n,arr[15],num=0;
    int i, imax, imin;
    cin>>n;
    while(n>0)
    {
        arr[num++]=n%10;
        n/=10;
    }
    imax=imin=arr[0];
    for(i=1; i<num; i++)
    {
        if(imax<arr[i])
            imax = arr[i];
        if(imin>arr[i])
            imin = arr[i];
        }
    cout<<imax-imin;
    return 0;
}



=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值