标签 知识 下的文章

C 判断一个数是否是完全平方数

若一个整数a为另一个整数b的平方,则称a为完全平方数,现在输入n个正整数,判断他们中有几个是完全平方数

这道底在小数据的时候可能比较简单,但遇到大数据的时候,就显得心有余而力不足了。

首先我们需要用long long,这种时候,我第一是想到用减法,开平方,用a-(int)a的方法,结果发现数字小于一定程度的时候,会近似的等于0,这个时候系统也通过了,默认其等于0,就算改成0.0也无法改变这个事实。

相等当然也是行不通的,理论上而言,永远都不能相信浮点数,浮点数不应该作为条件判断。

于是最终我们想到了用转换后的数字乘法,如果相等就是OK哒,如果不等的话证明开平方是小数。

这里可以用(long long)转换,也可以直接声明一个long long的变量,来存平方后的数,会自动转换为long long的值。

- 阅读剩余部分 -

C 今天我们来聊聊栈与括号配对

很巧的是,之前这两者我都有说过,虽然当时没有深刻的认识,只是很新鲜的看到了之后写了两篇日志罢了,没想到终有一天,我还是和他们俩见面了,而且是合体版。

栈:关于栈的进出
括号匹配:C 一个程序查找基本语法错误

当然,这两篇和数据结构完全没有关系,大致上是科普中的科普了。

我们来看看这次的题目:

表达式中可能出现花括号{}、方括号[]、园括号(),从键盘输入一个表达式,检查左右括号配对情况,并输出结果。
例子:{[(…)(…)]…(…)}配对
而{[(…)(…)]…[(]…)}不配对

- 阅读剩余部分 -

C 扑克牌配对说链表

以后每个数据结构作业都会那么小小的总结一下,数据结构的作业做了之后收获还是颇多的(废话当然比电子电路、大学物理收获多咯)

题目:

采用线性链表方式编程序模拟扑克牌配对游戏。通过键盘输入点数模拟抓牌,拿到新牌时,看手上是不是有同点数的牌,有的话,两者配对并抽掉手上的牌,没有的话,将牌插入手上的牌中,手上的牌保持按点数从小到大顺序排列。

扑克牌配对github链接

- 阅读剩余部分 -

C++ string型初识与getline

string比C语言好用多了。只要引入一个#include <string>以及using std::string;就OK了,其他部分真是像极了其他的语言,一些用法可以看注释,getline就和gets差不多一个意思,但没有数组自然也没什么风险吧。大致是酱紫的。

#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::endl;

int main()
{
    string line;
    string s1 = "Hello", s2 = " World";
    string s3 = s1 + s2;
    cout << s3 << endl;
    while (getline(cin, line))
        /* 如果不为空 */
        //if (!line.empty())
        /* 输出大于10字符的行 */
        if (line.size() > 10)
            cout << line << endl;
        
    /*
    while (cin >> word)
        cout << word << endl;
    */
    return 0;
}

C++ 命名空间的using声明

C++中,老师上课说的一直有一句:using namespace std;,不过他是什么意思,其实也就是一个命名空间的概念,概念这东西不多说(Primer 74页)

我们为什么要使用命名空间,不使用会有什么麻烦。
这里我们看一段代码:

#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1 = 0, v2 = 0;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;

    return 0;
}

- 阅读剩余部分 -

C++ auto decltype 初始化变量类型

C++中的两种有趣的类型,让编译器自己去分析我们所需要的数据类型,这两者有有些区别:
auto 定义的变量必须具有初值

// 由val1和val2相加的结果可以推断出item的类型
auto item = val1 + val2;  // 初始化为val1和val2相加的结果

但是,注意以下两条:

auto i = 0, *p = &i;   // 正确:i是整数,p是整型指针
auto sz = 0, pi = 3.14;  // 错误,sz和pi的类型不一致

具体的,Primer61页之后有,稍微看下就好了,关于类型都是个麻烦的东西。

- 阅读剩余部分 -

git push本地代码到github出错

用谷歌反倒没找到能看懂的……转自:http://www.douban.com/note/332510501/

刚创建的github版本库,在push代码时出错:

$ git push -u origin master
To [email protected]:******/Demo.git
 ! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:******/Demo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

网上搜索了下,是因为远程repository和我本地的repository冲突导致的,而我在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。

- 阅读剩余部分 -

C 清空键盘缓冲区若干方法

写这次的数据结构的作业的时候对于缓冲区问题深表蛋疼,getchar()深表拙计,于是搜了一下……

以下文字来自:http://www.ludou.org/c-clear-buffer-area.html

清空键盘缓冲区很多种方法,如用fflush(stdin); rewind(stdin);等,但是在linux这些都不起作用,还得我今天试了半天都没成功,上网搜了一下发现setbuf(stdin, NULL);就能直接清空键盘缓冲区了。

以下几个实例:

Sample one

#include <stdio.h>

int main()
{
    char ch1;
    char ch2;

    ch1 = getchar();
    ch2 = getchar();
    printf("%d  %d", ch1, ch2);
    return 0;
}

- 阅读剩余部分 -