牛客网OJ题解--20210313

栗酱数数

https://ac.nowcoder.com/acm/problem/14673

本系列记录翀翀😐痛苦的刷题日志,所有题目均来自于牛客网OJ题目,坚持刷题谈起来容易做起来难,希望我可以坚持下去,这里仍然分享一段励志文案:每个人都有梦想,然而有些人把梦想变成了现实,有些人的梦想依旧是梦想,只因为他们为梦想付出的努力程度不一样,他们坚持的时间不一样,最终才有这样的结果。

NC14673-栗酱数数

题目链接

https://ac.nowcoder.com/acm/problem/14673

题目描述

栗酱在酒桌上玩一个小游戏,第一个人从1开始数数,如果遇到数字中含4或者数字是4的倍数则跳过报下一个,谁数错了就要罚酒一杯。所以栗酱想让你写个程序把所有数生成出来,这样她就可以作弊直接读了。你一定能解决的吧?只有一组数据,一个数n代表从1开始数到n。(n≤100000),按顺序输出所有1到n之间任何一位都不是4的数,每两个数之间用一个回车隔开。

测试样例

输入

9

输出

1
2
3
5
6
7
9

解题思路

实际上就是一个枚举法,这里主要是练习一下用while不断模10取最后一位

解题代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        if (i % 4 == 0)
            continue;
        bool v = true;
        int k = i;
        while (k != 0)
        {
            if (k % 10 == 4)
            {
                v = false;
                break;
            }
            k /= 10;
        }
        if (v)
        {
            cout << i << endl;
        }
    }
    system("pause");
    return 0;
}

NC14676-裁缝大师

题目链接

https://ac.nowcoder.com/acm/problem/14676、

题目描述

坤酱想把一块圆形的布裁成正多边形,于是请你告诉坤酱正多边形的几个顶点应在哪里? 为了方便表示,圆给出在坐标系中,正多边形的第一个顶点固定在该圆在平行于x轴正方向最远的位置上,请按顺时针顺序输出所有的顶点。输入第一行给出单独一个整数T,表示数据组数接下来T行,每行顺序给出四个整数x,y,R,N:表示圆心为(x,y),半径为R,裁出一个正N边形。−104≤x,y≤104,0<R≤103,3≤N≤50。

对于每组数据,输出N行,从第一个顶点开始,按顺时针顺序输出所有N个顶点的坐标。
(由于坤酱工具有限,你只需保留2位小数)

测试样例

输入

2
0 0 10 4
100 0 1 3

输出

10.00 0.00
0.00 -10.00
-10.00 0.00
0.00 10.00
101.00 0.00
99.50 -0.87
99.50 0.87

解题思路

首先求出一个内角k=2pi/n的大小,然后从0度开始,每次减去一个内角,然后算Rsink和Rcosk也就是坐标变化量,然后用初始坐标相加即可。难点在于-0.0要标准化为0.0同时对于很小的10^-6以下的值也要标准化为0.0,这样类似于0.000001的值也会标准化为0.0从而实现和题目要求的小数位。

解题代码

#include <bits/stdc++.h>
using namespace std;

//pi的定义,学习了
const double pi(acos(-1));

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        double cx, cy, r, n;
        cin >> cx >> cy >> r >> n;
        //一个内角的大小
        double k = 2 * pi / n;
        //其实就是每次旋转一个内角,然后坐标加上cos和sin的值即可
        for (int i = n; i; i--)
        {
            //sin函数和cos函数都是接受的参数为弧度
            double a = cx + cos(k * i) * r;
            double b = cy + sin(k * i) * r;
            //核心:当小于1e-6应该是0.0
            if (fabs(a) < 1e-6)
                a = 0.0;
            if (fabs(b) < 1e-6)
                b = 0.0;
            cout << fixed << setprecision(2) << a << " " << b << endl;
        }
    }
    system("pause");
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务