首页 > 编程语言 >C++课程设计杭电题目(中)

C++课程设计杭电题目(中)

时间:2024-06-06 11:30:41浏览次数:26  
标签:图案 课程设计 输出 int C++ 杭电 循环 字符 整除

2073.无限的路

题目描述

http://acm.hdu.edu.cn/showproblem.php?pid=2073icon-default.png?t=N7T8http://acm.hdu.edu.cn/showproblem.php?pid=2073

Problem Description

甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形:


甜甜的好朋友蜜蜜发现上面的图还是有点规则的,于是他问甜甜:在你画的图中,我给你两个点,请你算一算连接两点的折线长度(即沿折线走的路线长度)吧。

Input

第一个数是正整数N(≤100)。代表数据的组数。
每组数据由四个非负整数组成x1,y1,x2,y2;所有的数都不会大于100。

Output

对于每组数据,输出两点(x1,y1),(x2,y2)之间的折线距离。注意输出结果精确到小数点后3位

运行代码

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double d(int x, int y)
{
    double sqrt2 = sqrt(2), sum = 0;
    for (int i = 1; i < x + y; i++)
        sum += sqrt2 * i;
   sum+= sqrt2 * x;
    for (int i = 0; i < x + y; i++)
       sum+= sqrt(i * i + (i + 1) * (i + 1));
    return sum;
}
int main() {
    int n;
    cin >> n;
    while (n--) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        cout << fixed << setprecision(3) << fabs(d(x1, y1) - d(x2, y2)) << endl;
    }
    return 0;
}

代码思路

  1. 函数 d(x, y):

    • 这个函数计算了一个累积距离,但计算逻辑可能与题目要求不符。
    • 首先,它通过一个循环累加了 sqrt2 * i,其中 sqrt2 是根号2,i 从1到 x+y-1,累加按一定规则增长的距离。
    • 接着,它又累加了一系列基于 i 和 i+1 计算的直角三角形斜边长度。
  2. 主函数 main():

    • 读取测试用例数量 n,然后循环读取每组测试数据,即四个整数 x1, y1, x2, y2,代表两个点的坐标。
    • 计算两个点各自到某个累积距离(由 d(x, y) 定义)的差的绝对值,并将结果保留三位小数后输出。

2074.叠框

题目描述

http://acm.hdu.edu.cn/showproblem.php?pid=2074

Problem Description

需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

Input

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

Output

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

运行代码

#include <iostream>
using namespace std;
int main() {
    char m[80][80];
    int n;
    char a, b, c;
    bool flag = true;
    while (cin >> n >> a >> b) {
        if (flag == true) {
            flag = false;
        }
        else {
            cout << endl;
        }
        for (int i = 1; i <= n; i++) {
            if (i % 2 == 0) {
                c = b;
            }
            else {
                c = a;
            }
            int start = n / 2 - i + 1, end = n / 2 + i;
            for (int k = start; k <= end; k++) {
                m[start][k] = c;
            }
            for (int k = start; k <= end; k++) {
                m[k][start] = c;
            }
            for (int k = start; k <= end; k++) { 
                m[k][end - 1] = c;
            }
            for (int k = start; k <= end; k++) {
                m[end - 1][k] = c;
            }
        }
        if (n != 1) {
            m[0][0] = ' ';
            m[0][n - 1] = ' ';
            m[n - 1][0] = ' ';
            m[n - 1][n - 1] = ' ';
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << m[i][j];
            }
            cout << endl;
        }
    }
    return 0;
}

代码思路

  1. 输入处理:程序首先读取三个输入值:n(图案的边长,即正方形的边长),ab(两种字符,用于构造图案)。使用一个布尔标志flag来控制输出之间是否需要换行,确保首次输出时不打印额外的换行。

  2. 二维数组m初始化:定义一个80x80的字符型二维数组m来存储图案,实际上使用了前n行和列。

  3. 图案生成逻辑:

    通过两层循环实现。外层循环遍历从1到n,内层循环负责在每一轮根据当前行数i确定使用字符a还是b(如果i是偶数则用b,否则用a)。
    • 内层循环有四部分,分别负责在四个方向上填充字符c:从左上到右上对角线从左到右的水平线从左下到右下的对角线从上到下的垂直线
    • 这样的循环结构保证了以正方形中心为对称轴,按层向外构建图案,每层使用相同的字符。
  4. 处理特殊情况:当n不等于1时,将正方形的四个角落设置为空格,以保持内部图案的连续性。

  5. 输出图案:最后,遍历二维数组m并打印,形成所需的图案样式。

根据用户指定的边长n及两种字符ab,生成一个具有特定对称性的字符图案,其中图案的每个“圈层”交替使用ab字符。

2075.A|B?

题目描述

http://acm.hdu.edu.cn/showproblem.php?pid=2075

Problem Description

正整数A是否能被正整数B整除,不知道为什么xhd会研究这个问题,来帮帮他吧。

Input

输入数据的第一行是一个数据T,表示有T组数据。
每组数据有两个正整数A和B(A,B<10^9)。

Output

对于每组输入数据,输出"YES"表示可以被整除,"NO"表示不能被整除。

运行代码

#include <iostream>
using namespace std;
int main() {
    int T;
    cin >> T;
    while (T--) {
        int A, B;
        cin >> A >> B;
        if (A % B == 0) {
            cout << "YES" << endl;
        }
        else {
           cout << "NO" << endl;
        }
    }
    return 0;
}

代码思路

  1. 输入测试用例数量:首先,程序读入一个整数T,表示有T组测试数据。

  2. 循环处理每组测试数据:使用while (T--)循环,这意味程序会处理T次测试用例。每次循环,T的值减1,直到T变为0,循环结束。

  3. 读取每组测试数据:在每次循环中,程序读取两个整数AB,分别代表被除数和除数。

  4. 判断能否整除并输出结果:利用条件语句if (A % B == 0)来检查A是否能被B整除。否则,如果不能整除,程序输出"No"(同样,原代码实际输出"NO"`,包含换行符)。如果AB的结果为0(即A % B == 0),说明A能被B整除,程序输出"Yes"(注意原代码实际输出的是"YES"`,包含换行符)。

  5. 结束程序:所有测试用例处理完毕后,程序正常结束,返回0。

标签:图案,课程设计,输出,int,C++,杭电,循环,字符,整除
From: https://blog.csdn.net/u014114223/article/details/139448145

相关文章

  • namespace C++命名空间
    命名空间的概念最早出现在C++编程语言中,用于解决代码组织和命名冲突的问题。其设计初衷是为了让开发者能够更轻松地编写和维护大型的软件系统。来源C++是一种面向对象的编程语言,它继承了C语言的基本语法和特性,并在此基础上引入了一些新的概念和功能。命名空间是其中......
  • C++基础编程100题-004 OpenJudge-1.1-06 空格分隔输出
    更多资源请关注纽扣编程微信公众号http://noi.openjudge.cn/ch0101/06/描述读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。输入共有四行:第一行是一个字符;第二行是一个整数;......
  • 快速C++中的入门智能指针
    ✨前言✨......
  • VSCode(Visual Studio Code) C/C++ 开发环境 | MinGW无需输入代码 — 99.99%成功率(超详
    VisualStudioCodeC++六一马不停蹄更新中……参考资料:visualstudio|cppuninstall|vscode———————————————————————————————————————————————卸载VSCode【如没下跳转】-先下载下准备zip:MinGW32.zipMinGW真......
  • 「C++」论高精度
    大家好,我是Charzie。在编程领域,高精度计算是一个常见的问题。当标准的整型或浮点型无法满足我们的计算需求时,高精度计算就显得尤为重要。在C++中,虽然标准库没有直接提供高精度数据类型,但我们可以通过一些技巧和工具类来实现高精度计算。为什么需要高精度?在编程中,我们经常会遇到......
  • 习题整理《C++17从入门到精通》第二章-变量和基本类型
                                                             //复习用,如有错误,请指正1.下面哪些是不合法的变量标识符?为什么?@ohd      *zara    a2bc    move_name    a_123myname50  _......
  • 习题整理《C++17从入门到精通》第五章-复合类型:数组、指针和引用
                                                            //复习用,如有错误,请指正1.下面程序的输出是什么?#include<iostream>usingnamespacestd;intmain(){intx=10;int&ref=x;......
  • c++类中初始化列表的优点以及顺序问题
    1.使用初始化列表的好处效率:使用初始化列表可以避免不必要的拷贝操作,直接在对象构造时初始化成员变量,提高代码的执行效率。(因为变量的初始化分为初始化阶段和赋值阶段,在{}里面初始化属于赋值阶段)常量成员初始化:可以在初始化列表中对常量成员或引用的对象进行初始化,且只能在初......
  • C++PrimerPlus第十一章类的使用 :练习7 复数类的实现和重载运算符对复数做运算----本
    复数有两个部分组成:实数部分和虚数部分。复数的一种书写方式是:(3.0,4.0),其中,3.0是实数部分,4.0是虚数部分。假设a=(A,Bi),c=(C,Di),则下面是一些复数运算。加法:a+c=(A+C,(B+D)i)。减法:a-c=(A-C,(B-D)i)。乘法:ac=(AC-BD,(AD+B*C)i)。乘法::xc=(xC,x*Di),其中x为实数。......
  • C++PrimerPlus第十一章类的使用 :练习6 关系运算符的重载
    6.重新编写Stonewt类(程序清单11.16和程序清单11.17),重载全部6个关系运算符。运算符对pounds成员进行比较,并返回一个bool值。   编写一个程序,它声明一个包含6个Stonewt对象的数组,并在数组声明中初始化前3个对象。然后使用循环来读取用于设置剩余3个数   组元素的......