题意: 有n只兔子在不同的位置,任意一只兔子可以跳到其余任两只兔子(必须保证它们中间有空位)中间,问最多可移动多少次? 思路: 可看作从任一侧的兔子向中间插空,因此可以将所有兔子中间的空位数相加,再减去两侧较小的数字(最左侧两只兔子间距离与最右侧两只兔子间距离的较小的值)。 AC代码: #include<iostream> #include<vector> #include<cstring> using namespace std; int main() { int t, n, sum, addr[500]; int front, rear; cin >> t; while(t--) { sum = 0; memset(addr, 0, sizeof(addr)); cin >> n >> addr[0]; for(int i = 1; i < n; i 继续阅读 >>


王良 17/12/21 22:09:16
1. 引用变量 引用是已定义变量的别名,若使用int & x = a;,即将x作为a的引用,其中的&不是地址运算符,而是类型标识符的一部分。事实上,x与a指向的是同一块内存空间,对x进行操作即对a进行操作。必须在声明引用变量时进行初始化。 /* ** 该程序试图通过指针改变引用变量x的指向 ** 体现了引用与指针的区别 */ int a = 100; int *p = &a; //指针p指向a int & x = *p; //x作为*p的引用,即对a的引用 int b = 50; p = &b; //将指针p指向b,试图修改x为b的引用(invalid) cout << "x = " << x << endl; 该程序最终输出为x = 100。 可见,一旦将x初始化为*p,也就是使x指向a,再接下来即使将指针p指向b,也不能改变x已经是a的引用的事实。 2.引用在函数中的易错点 继续阅读 >>


王良 17/12/04 22:33:36
今天突然发现无法从本地git push到远程仓库了(然而事实是网有点卡,github官网没更新过来,然而……ssh-key已经删了….),所以又重新添加ssh-key。 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub 将显示的内容粘贴到github的ssh-key里。 却发现并不能用,一直显示: sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publickey). fatal: Could not read from remote repository. 所以,又删掉ssh-key,重新添加了一次,还是没用。 在删掉.ssh仍没用,此时已经要抓狂了,只能请教度娘了。 rm -r ~/.ssh 终于找到了几篇博客: http://blog.csdn.net/laner415/article/details/52966890 http://blog.csdn.net/zengqiang 继续阅读 >>


王良 17/11/21 22:46:45
本文将主要介绍const关键字的使用。 首先,说一下const是什么: const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。 然后,我们来看一下这四处声明: const int a = 1; //code1 const int *p = &a; //code2 int * const p = &a; //code3 const int * const p = &a; //code4 下面就具体说一下这四行代码的作用与区别。 code1最简单,即声明a初值为1,且为常量,其值不可更改; code2即将变量a的地址赋值给p,此时输出*p的值为1,而且若进行*p = 2会报错,也就意味着p所指向的值(a的值)是不可更改的; code3因为const修饰的变量是p,同code1,也就意味着p存储的值(变量a的地址,也就是p指向的地址)是不可更改的,若进行p = &b会报错; code4综合code2 code3即可得出结论,p指向的地址和p指向变量的值都是不可更改的。 指针和const 继续阅读 >>


王良 17/11/19 22:55:44
本文主要内容为C++下的输入输出函数以及for循环中的C++11新特性。 一、输入输出函数 1. cin cin 遇到 空格、回车、Tab结束输入, 且会将读到的空格、回车、Tab 丢弃,例: #include<iostream> using namespace std; int main(void) { char a[10]; cin >> a; cout << a << endl; //第一次输出 cin >> a; cout << a << endl; //第二次输出 return 0; } Test: 由图像可见,在输入时,若输入两串字符,即便程序需要输入两次,第二次读取不会再次手动从键盘输入,而是上次输入的空格后的内容成为第二次读入的字符串。类似于scanf。 2. cin.get() 1) cin.get()有三种形式: ch = cin.get() 继续阅读 >>


王良 17/11/01 21:33:38
1. 一个线程实验的问题 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <ctype.h> #include <pthread.h> #define MAX_THREAD 3 /* 线程的个数 */ unsigned long long main_counter, counter[MAX_THREAD]; pthread_mutex_t mutex; void* thread_worker(void*); int main(int argc,char* argv[]) { int i, rtn, ch; pthread_t pthread_id[MAX_THREAD] = {0}; /* 存放线程id*/ for (i=0; i<MAX_THREAD; i++) { 继续阅读 >>


王良 17/08/05 09:28:01
1. 线程执行顺序问题 #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> void *thread1(void *); void *thread2(void *); pthread_key_t key; void *thread1(void *arg){ int a = 1, *tsd = &a; pthread_t thid2; printf("thread1 %lu is running\n", pthread_self()); pthread_setspecific(key, tsd); pthread_create(&thid2, NULL, thread2, NULL); sleep(3); //---2 tsd = (int *)pthread_getspec 继续阅读 >>


王良 17/08/02 23:53:10
1. Find The Multiple ( POJ 1426) Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits. Input The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input. Ou 继续阅读 >>


王良 17/07/30 20:43:04
1. 执行新程序 只列出几个常用的函数: #include <unistd.h> int execve(const char *path, char * const argv[], char * const envp[]);//envp[]为环境变量,可直接调用 int execv(const char *path, char * const argv[]);//与execve()类似 int execvp(const char * path, char * const argv[]);//path新程序的名称   正常情况下,这些函数不会返回,因为进程的执行映像已经被替换,没有剖接收返回值的地方。若发生错误,则返回-1.   新程序的进程保持了原来进程的进程ID、父进程ID、实际用户ID和用户组ID。同时,调用新程序后,原有的子进程的映像被替代,不再被执行。 2. 等待进程结束 #include <sys/types.h> #include <wait.h> pid_t wait(int *sta 继续阅读 >>


王良 17/07/29 22:44:44
1. fork #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> int main (void) { pid_t pid; int i = 3; pid = fork(); switch(pid){ case 0: while(i--){ printf("A background process, PID:%d, ParentID:%d\n", getpid(), getppid()); } sleep(1); break; case -1: perror("Process creation failed.\n"); exit(1); 继续阅读 >>


王良 17/07/27 11:58:06