学习日记 | 菜鸟在xcode中学习c/c++

2020-01-13  本文已影响0人  三金姐姐

——1.11更新——

【浮点数输出】

Q1:输入只有一行,一个浮点数。保证数据合法,不存在整数位的前导零以及小数位的后导零。

题目解析:
计算机不能准确表示浮点数,这里要精确表示,采用字符串输出的形式。
参考答案:

int main(){
    char buf[100];
    gets(buf);
    puts(buf);
    return 0;
}

题目总结:
get()会出现警告,认为是不安全的。因为没有对输入的字符串做任何限制,可能会超出规定大小,使用时要小心。

——1.13更新——

【循环输出】

Q2:给出一个数n,求1到n中,有多少个数不是2、5、11、13的倍数。
要求:本题有多组输入1\le n\le10^{18}.

参考答案:

#include<stdio.h>
#define ll long long 
int main(){
    ll n;
    while(~scanf("%lld",&n))
    {
        ll ans1=n/2+n/5+n/11+n/13;//1~n中只是4个数中一个的倍数的数的总数
        ll ans2=n/10+n/55+n/22+n/26+n/65+n/143;//1~n中是4个数中两个的倍数的数的总数
        ll ans3=n/110+n/130+n/286+n/715;//1~n中是4个数中三个的倍数的数的总数
        ll ans4=n/1430;//1~n中是4个数的倍数的数的总数
        ll ans=ans1-ans2+ans3-ans4;//1~n中是2、5、11、13的倍数的数的总数
        ll ANS=n-ans;//1~n中不是2、5、11、13的倍数的数的个数总数
        printf("%lld\n",ANS);
    }
    return 0;

题目总结:
1.long long占用8个字节,数据表示范围从int[-21^{31},2^{31}-1],升级到[-21^{63},2^{63}-1]
2.#define是C指令,用于为各种数据类型定义别名,与typedef类似,但是它们有以下几点不同:

3.C语言中while循环的语法为:

while(condition)
{
   statement(s);
}

在这里condition可以是任意的表达式,当为任意非零值使都为true。当条件是true时执行循环;当条件是false时退出循环,程序流将继续执行紧接着循环的下一条语句。
此例中,条件是~scanf("%lld",&n),其中scanf()的返回值情况为:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回EOF。而~是取反运算符,按二进制位进行“取反”运算。当scanf("%lld",&n)没有输入时,则返回EOF,其值通常为-1。而-1按位取反为0
4.解题中用到了数论和离散数学的知识:

ll ans=ans1-ans2+ans3-ans4;//1~n中是2、5、11、13的倍数的数的总数

【解】ans是被2或5或11或13除尽的数的个数。

——1.30更新——

【函数调用】

Q1:对于传统的汉诺塔游戏我们做一个拓展,我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,请实现一个函数打印最优移动轨迹。
给定一个int n,表示有n个圆盘。请返回一个string数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid/right]。

参考答案:

class Hanoi {
public:
    vector<string> getSolution(int n) {
        std::vector<std::string> hnoi;
        std::string a("left");
        std::string b("mid");
        std::string c("right");
          
        GetHnoiString(hnoi, n, a, b, c);
          
        return hnoi;
    }
      
    void GetHnoiString(std::vector<std::string>& hnoi, int n, std::string& a, std::string& b, std::string& c)
    {
        if (n == 1)
        {
            std::string tmp("move from ");
            tmp += a;
            tmp += " to ";
            tmp += c;
              
            hnoi.push_back(tmp);
        }
        else
        {
            GetHnoiString(hnoi, n - 1, a, c, b);
              
            std::string tmp("move from ");
            tmp += a;
            tmp += " to ";
            tmp += c;
            hnoi.push_back(tmp);
              
            GetHnoiString(hnoi, n - 1, b, a, c);
        }
    }
};

系统错误
1.Internal Error
2.增大字体
command键+

上一篇 下一篇

猜你喜欢

热点阅读