coursera 《计算导论与C语言基础》 期末考试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22073849/article/details/79840864

coursera 计算导论与C语言基础 期末考试 编程作业

编程题#1:判断闰年

  • 注意: 总时间限制: 1000ms 内存限制: 65536kB

  • 描述
    判断某年是否是闰年。

  • 输入
    输入只有一行,包含一个整数a(0 < a < 3000)

  • 输出
    一行,如果公元a年是闰年输出Y,否则输出N

样例输入

2006

样例输出

N

  • 提示

    公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年, 能被3200整除的也不是闰年,如1900年是平年,2000年是闰年,3200年不是闰年。

参考代码

//POJ Grids 2733
#include <iostream>
using namespace std;

int main()
{
    int num;
    cin>>num;
    if (num%4)
    {
        cout<<"N";
    }
    else
    {
        if (num%100==0&&num%400)
        {
            cout<<"N";
        }
        else if (num%3200==0)
        {
            cout<<"N";
        }
        else
            cout<<"Y";

    }

    return 0;
}

编程题#2:能被3,5,7整除的数

  • 注意: 总时间限制: 1000ms 内存限制: 65536kB

  • 描述
    输入一个整数,判断它能否被3,5,7整除,并输出以下信息:

    1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);

    2、能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔)

    3、能被其中一个数整除(输出这个除数)

    4、不能被任何数整除;(输出小写字符’n’,不包括单引号)

  • 输入
    一个数字

  • 输出
    一行数字,从小到大排列,包含3,5,7中为该输入的除数的数字,数字中间用空格隔开

  • 样例输入

第一组
0
第二组
5
第三组
15
第四组
105
第五组
1


- 样例输出



第一组
3 5 7
第二组
5
第三组
3 5
第四组
3 5 7
第五组
n

  • 提示
    因为有多组测试数据,程序通过下面方式读入n

参考代码

#include <iostream>
using namespace std;

int main()
{
        int n;
        while(cin >> n)
        {
                if(n % 105 == 0)
                                cout << "3 5 7\n";
                else if((n % 105 != 0) && (n % 15 == 0))
                                cout << "3 5\n";
                else if((n % 105 != 0) && (n % 21 == 0))
                                cout << "3 7\n";
                else if((n % 105 != 0) && (n % 35 == 0))
                                cout << "5 7\n";
                else if((n % 3 == 0) && (n % 5 != 0) && (n % 7 != 0))
                                cout << "3\n";
                else if((n % 3 != 0) && (n % 5 == 0) && (n % 7 != 0))
                                cout << "5\n";
                else if((n % 3 != 0) && (n % 5 != 0) && (n % 7 == 0))
                                cout << "7\n";
                else if((n % 3 != 0) && (n % 5 != 0) && (n % 7 != 0))
                                cout << "n\n";

        }
        return 0;
}



编程题#3:最远距离

  • 注意: 总时间限制: 1000ms 内存限制: 65536kB

  • 描述
    给定一组点(x,y),求距离最远的两个点之间的距离。

  • 输入
    第一行是点数n(n大于等于2)

    接着每一行代表一个点,由两个浮点数x y组成。

  • 输出
    输出一行是最远两点之间的距离。

使用cout << fixed << setprecision(4) << dis << endl;输出距离值并精确到小数点后4位。

fixed和setprecision是在头文件里定义的格式控制操作符,需要#include .

  • 样例输入

    6
    34.0 23.0
    28.1 21.6
    14.7 17.1
    17.0 27.2
    34.7 67.1
    29.3 65.1
    

  • 样例输出

    53.8516
    

  • 提示
    注意在内部计算时最好使用double类型,float精准度不能满足本题测试数据要求。

参考代码

#include<stdio.h>  
#include <math.h>  
int main()  
{  
    int n,i;  
    float p[100][2],dis=-1.0;   //dis? 注意用float  
    scanf("%d",&n);  
    for (i=0;i<n;i++)   
    {  
        int j;  
        scanf("%f%f",&p[i][0],&p[i][1]);  
        for (j=0;j<i;j++)   
        {  
            double l;  
            l=(p[i][0]-p[j][0])*(p[i][0]-p[j][0])+(p[i][1]-p[j][1])*(p[i][1]-p[j][1]);  
            if(dis<l)   
                dis=l;  
        }  
    }  
    printf("%.4f\n",sqrt(dis));     // sqrt开方函数  
    return 0;  
}  

编程题#4:简单计算器

  • 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

  • 注意: 总时间限制: 1000ms 内存限制: 65536kB

  • 描述
    一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。

  • 输入
    输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。

  • 输出
    输出只有一行,一个整数,为运算结果。然而:

    1. 如果出现除数为0的情况,则输出:Divided by zero!

    2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!

  • 样例输入

    第一组
    1 2 +
    第二组
    1 0 /
    第三组
    1 0 XOR
    

  • 样例输出

    第一组
    3
    第二组
    Divided by zero!
    第三组
    Invalid operator!
    

  • 提示
    可以考虑使用if和switch结构。

参考代码

#include<iostream>
using namespace std;
int main() {
    int a, b;
    char c;
    while (cin >> a >> b >> c) {
        switch (c) {
        case '+':
            cout << a + b << endl;
            break;
        case '-':
            cout << a - b << endl;
            break;
        case '*':
            cout << a * b << endl;
            break;
        case '/'://只有除法需要特别注意
            if(b!=0)
            cout << a / b << endl;
            else
                cout <<"Divided by zero!"<< endl;//除数不能为0
            break;
        default:
            cout << "Invalid operator!" << endl;
            break;
        }
    }
    return 0;
}

编程题#5:字符串插入

  • 注意: 总时间限制: 1000ms 内存限制: 65536kB、

  • 描述
    有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的’\0’。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。

  • 输入
    输入包括若干行,每一行为一组测试数据,格式为

    str substr

  • 输出
    对于每一组测试数据,输出插入之后的字符串。

  • 样例输入

abcab eee
12343 555

  • 样例输出

    abceeeab
    12345553



  • 提示
    这题有多组输入,请参照第二题的提示依次读入和处理每一组数据。

如果使用了字符串函数,比如strlen,请包含cstring头文件 #include 。

参考代码

#include<iostream>
int main() {
    using namespace std;

    char str[11];
    char substr[4]; //定义两个字符数组
    int mark = 0;
    cin >> str >> substr;
    int biggest = str[0];
    for (int i = 0; i < 10; i++) {
        if (str[i] == '\0')
            break;
        else if (str[i] > biggest) {
            biggest = str[i];
            mark = i;
        }
    }
    for (int i = 0; i < mark + 1; i++) {
        cout << str[i];
    }
    for (int i = 0; i < 3; i++) {
        cout << substr[i];
    }
    for (int i = mark + 1; i < 10; i++) {
        if (str[i] == '\0')
            break;
        else
            cout << str[i];
    }
    cout << endl;
    return 0;
}
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string dest,sorc;
    int pos;
    while(cin>>dest>>sorc)
    {
        pos=0;
        for (int i=0;i<dest.length();i++)
        {
            if (dest.at(i)>dest.at(pos)) pos=i;
        }
        dest.insert(dest.begin()+pos+1,sorc.begin(),sorc.end());
        cout<<dest<<endl;
    }
    cin.get();cin.get();
    return 0;
}


第二段代码尝试使用string库来执行,AC

第一段代码在上面显示wrong answer ,暂时没有找到错误的原因,而且特地查了一下讨论区,发现也有很多人遇到了和我一样的情况,莫名其毛的wronganswer 。所以如果有人知道为什么还请指出来,大家共同进步。

猜你喜欢

转载自blog.csdn.net/qq_22073849/article/details/79840864