简易文件打包程序 对指定目录下面的文件进行打包。打包方式: 把目录下面的文件名,文件大小,偏移位置,文件内容,以索引形式保存在打包文件中使用方法:1.packetfiles.exe为打包程序 2.运行时使用管理员权限 3.可以直接运行packetfiles.exe进行打包,只需要把需要打包的文件放在与packetfiles.exe同一级的input目录即可(如果没有该目录需要手动创建在把文件扔进去),生成的打包
贪吃蛇系列终章----贪吃蛇专家智能bug修复版 这个版本也是这个贪吃蛇系列的最后一个版本了(虽然蛇长度变得很长之后,食物在某些区域,蛇的行走路线还有优化的空间,但是近期应该不会再进行更新了),下面对之前所有的迭代版本做一个总结:版本一、只有闯关模式和限时模式(主要时间花在贴那个蛇头,蛇转弯,蛇身和蛇尾上面,因为不同的方向状态是不一样的)(整整1天) 版本二、初级智能版,用了简单的BFS搜索,主要针对大食物和小食物(2个小时) 版本三、中级智能
这一天是星期几(难度:1颗星) 问题描述:输入1个日期,日期的格式由3个正整数组成(正整数之间用空格分开),输出这一天是星期几,如果日期不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”,否则输出这一天是星期几。输入举例:2017 1 1输出结果: 星期天参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31,
简单序列求和 问题描述:求下列序列的和: 1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)比如当n输入为3的时候,则和为1 + 3 + 6 = 10参考代码1:#include <stdio.h>int main(){ int n; printf("输入求和的最大项数: "); scanf_s("%d", &n); int
新字体的永久注册 CString GetCurrentModuleDir(){ TCHAR szPath[MAX_PATH + 1] = { 0 }; if (0 == ::GetModuleFileName((HMODULE)&amp;__ImageBase, szPath, MAX_PATH)) return L""; ::PathRemoveFileSpec(szPath); CString...
简易解包程序 对压缩包进行解压。简易压缩程序请参考博客的另外一篇文章: http://blog.csdn.net/yi_ming_he/article/details/77689405解包方式: 根据打包建立的索引表,找到对应的文件信息,逐个释放出来即可。使用方法: 1.可以直接运行UnpacketFiles.exe进行解包,只需要把files.pak文件放入和UnpacketFiles.exe同一级目录即
内部函数和外部函数 内部函数:如果一个函数只能被本文件中其它函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。内部函数又称静态函数。使用内部函数,可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所用函数是否会与其它文件中函数同名。外部函数:在定义函数时,如果在函数首部的最左端冠以关键字extern, 则表
自定义CString类 问题描述:自定义一个CString类,包括获取字符串长度,字符串查找,字符串比较,字符串取子串等都自己来实现。参考代码:MyString.h文件#pragma once#include <iostream>#include <assert.h>#include <stdarg.h>class CMyString{ friend std::ostream& operator<< (std
自己实现strcat函数 问题描述:自己实现一个MyStrcat函数,要和C语言库函数的strcat函数完成同样的功能。问题分析: 首先我们要了解一下strcat函数它到底做了什么事情(1) 函数原型 char *strcat(char *dest, const char *src);(2) 函数说明dest 为目的字符串指针,src 为源字符串指针。strcat() 会将参数 src 字符串复制到参数 dest 所
根据进程名判断进程是否运行 问题描述:给定进程名,判断该进程是否正在运行。参考代码:#include <TlHelp32.h>BOOL IsProcessRunning(LPCTSTR lpProcessName){ if (NULL == lpProcessName) return FALSE; HANDLE hProcess = NULL; HANDLE hProcessSn
根据目录路径递归创建目录 问题描述:给定一个目录路径,如果该路径不存在则创建出来。参考代码:void CorrectPath(CString& strPath){ strPath.Replace(_T('/'), _T('\\')); do { if (strPath.Find(_T("\\\\")) == -1) break; strPath.
排序算法之堆排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99堆排序的基本思想是,建立一棵完全二叉树,不断调整这棵二叉树,保持这棵二叉树一直是一个大顶堆。参考代码:#include <stdio.h>int arr[100], n;void Adj
结构体内存对齐问题 问题描述:结构体内存对齐问题值直接的体现就是计算结构体的sizeof占用的字节数。结构体内存对齐的几个原则,有了这几个原则,不管结构体里面是什么元素,我们都能够正确算出sizeof值(以VS2013为例)原则1: 结构体中每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。原则2: 在原则1的基础上,检
空瓶换汽水问题(难度:1颗星) 问题描述:超市规定每n个空汽水瓶可以换一瓶汽水,小李有m个空汽水瓶,最多可以换几瓶汽水(提示:可以先喝汽水,再还超市空瓶,但是一定要还哦)输入输出描述:n和m由外部输入的正整数,并且保证n的范围是【2,10000000】,m的范围是【1,10000000】,输出最多喝了多少汽水。问题分析:要求出最多喝了多少汽水,其实就是需要我们想到一种策略,能够尽可能的用完手中的空瓶,例如,如果我们手中有n-1个空
约瑟夫环问题(二):(难度:2颗星) 问题描述:编号为1,2,…,n的n个人按顺时针方向围坐一圈,任选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,输出最后一个出列的人的编号。输入输出描述:m和n由用户输入,并且保证m和n的范围是【1,10000000】,输出最后出列的编号。问题分析:为了方便说明,我
约瑟夫环问题(一)(难度:1颗星) 问题描述:编号为1,2,…,n的n个人按顺时针方向围坐一圈,任选一个正整数作为报数上限m,从第一个人开始按顺时针方向从自1开始顺序报数,报道m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序.PS:m和n由用户输入,并且保证m和n的范围是【1,1000】,输出出列序列。问题分析:因为这个是要求出所有的出列序列,所以目前
文件内容合并 问题描述:把file1和file2的文件内容合并到file3。PS: 主要用到3个函数:fopen,fgetc,fputc。参考代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#define FILEPATH1 "C:\\1.txt"#define FILEPATH2 "C:\\2.txt"#define FILEPATH3 "C:\\
括号匹配检测(难度:半颗星) 问题描述:输入一个字符串,字符串中只包含两种字符:’(‘和’)’,判断字符串的括号是否匹配,如果匹配输出YES,否则输出NO。例如: (())是匹配的 ()))是不匹配的参考代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stack>std::stack<char>st;int
单链表排序(函数指针) 问题描述:用户输入数据,构成单链表,然后对单链表进行排序,能够随意切换排序的方法(列入升序降序)。PS:要随意切换排序的方法,那么使用函数指针作为参数传入到排序函数中,那么函数指针指向的函数就可以方便的制定排序规则了。参考代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <malloc
虚拟按键的判断方法 问题描述:判断CapsLock,Alt,Ctrl,Shift是否被按下参考代码:#include <stdio.h>#include <windows.h>int main(){ while (1) { short sValue = GetKeyState(VK_CAPITAL); if (sValue & 0x1)//该值低位位1,则表示Caps
可逆素数(难度:半颗星) 问题描述:可逆素数是指该数本身是一个素数,并且把该数倒过来也是一个素数。例如:1091是一个素数,把它倒过来1901也是一个素数,所以我们就说1091是一个可逆素数(同理1901也是一个可逆素数)输出所有范围在【1000,9999】并且各位数之和是11的整数倍的可逆素数。参考代码:#include <stdio.h>int IsPrime(int n){//判断n是否为质数,如果是返回1,否则返回
学生管理系统(控制台版本) 问题描述:设计开发一个基于控制台版本的学生管理系统,该系统支持以下功能:打印数据库中的所有信息录入信息到数据库根据输入关键字,删除数据库中的某个同学的信息清空数据库根据输入关键字,查询数据库中某个同学的信息根据输入关键字,修改数据库中某个同学的信息对学生信息进行排序系统说明:本系统暂时不用STL库中的vector或者list,而是自己用结构体实现链表本系统暂时不用已经成熟的数据库
求解同余方程组(难度:2颗星) 问题描述:有一个同余方程组,有N个同余方程组成(N由用户输入),另外每个同余方程的a[i]和m[i]也又用户指定,如下所示:x≡a[1](mod m[1]) x≡a[2](mod m[2]) x≡a[3](mod m[3]) x≡a[4](mod m[4]) … x≡a[n](mod m[n])求x的最小正整数解。问题分析:参考我的另外一篇文章“中国剩余定理” http://b
中国剩余定理 问题描述:有如下同余方程组:x≡a[1](mod m[1]) x≡a[2](mod m[2]) x≡a[3](mod m[3]) x≡a[4](mod m[4]) … x≡a[n](mod m[n])根据同余方程组求出x的值。(其中m[1],m[2],m[3],m[4]…m[n]两两互素)问题分析:中国剩余定理就是专门用来解同余方程组的,但是必须要满足前提条件所有的模都是两两互素的。首先计
求解二元一次方程(难度:2颗星) 问题描述:用户输入a,b,c三个整数,求解二元一次方程ax+by=c,如果(x,y)不存在整数解,则输出“No Solution”,否则输出一个整数解(x,y)使得x是最小正整数。解题思路:参考我的另外一篇文章“扩展欧几里得算法”http://blog.csdn.net/yi_ming_he/article/details/72819713参考代码:#include <stdio.h>typedef
扩展欧几里得算法 问题描述:求解二元一次方程ax+by=c。问题分析:上述的二元一次方程可以用同余方程来进行描述:ax≡cmod(b)两个问题可以进行转换,但是都可以用扩展的欧几里得算计来解决。首先关于欧几里得算法(也叫做辗转相除法),可以查看我的另外一篇文章: http://blog.csdn.net/yi_ming_he/article/details/72084826下面就来说说如何用扩展欧几里得算法求解二元
自守数(难度:半颗星) 问题描述:如果一个数n是一个自守数,它必须满足如下条件: 1. 如果n有k位数构成,那么n的平方的末尾k位数必须和n相等例如: 25是一个自守数,因为 25 * 25 = 625,并且25等于625后面两位25输出【1,10000】范围内的自守数。参考代码:#include <stdio.h>int main(){ int i, num, temp, factor; for
亲密数对(难度:半颗星) 问题描述:输出【1,100000】范围内的错有亲密数对。如果说n和m是一个亲密数对,那么它们必须满足以下条件 1. n的全部因子之和(不包括n)必须等于m 2. m的全部因子之和(不包括m)必须等于n例如: 220的全部因子之和为: 1+2+4+5+10+11+20+22+44+55+110=284284的全部因子之和为: 1+2+4+71+142=220所以220和284是一对个亲密数对
等差数列(难度:半颗星) 问题描述:一个等差数列的前4个数之和是26,前4个数之积是880,输出这个等差数列的前10项。问题分析:设等差数列的首项为i,公差为j,那么等差数列的和与积分别可以表示为: sum=4 * i + 6 * j product = i * (i + j ) * (i + 2 * j) * (i + 3 * j)参考代码:#include <stdio.h>#include <math.h>int
一数三平方(难度:半颗星) 问题描述:在【100000,999999】范围内找出符合以下条件的数并输出: 1. 该数本身是一个平方数 2. 该数的前3位也是一个平方数 3. 该数的后3位也是一个平方数参考代码:#include <stdio.h>#include <math.h>int main(){ int i, num0, num1, num2; for (i = 100000; i < 99
特殊完全平方数(难度:半颗星) 问题描述:在【100,10000】的范围内找出所以满足以下条件的数并输出 1. 这个数是一个完全平方数 2. 这个数中某个数字出现的次数大于1次参考代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ int i, n, temp; int IsExist[10] = { 0 }, Is
二进制转IP地址(难度:半颗星) 问题描述:任意数组32位的二进制数,转换成IP地址的形式输出。输入样例: 11111111000000001111111100000001输出样例: 255.0.255.1参考代码:#include <stdio.h>#include <stdlib.h>#include <time.h>int GetExponential(int a, int n)//求a的n次幂{ if (n
分糖果问题(难度:1颗星) 问题描述:有n颗糖果,平均分给班上m个同学(m保证大于1),学生们按照任意顺序领取(反正大家数目都一样),第一个领取的是1颗加上剩余糖果数目的1/10,第二个领取的是2颗加上剩余数目的1/10,第三个领取的是3颗加上剩余数目的1/10,第四个领取的是4颗加上剩余数目的1/10,以此类推,求总共有多少糖果,班上有多少同学(如果有多个满足条件的答案,去n最小的那个)。问题分析:第一个同学取得的数目为:1
自己实现strcpy函数 问题描述:自己实现一个MyStrcpy函数,要和C语言库函数的strcpy函数完成同样的功能。问题分析: 首先我们要了解一下atoi函数它到底做了什么事情(1) 函数原型 char *strcpy(char *dest, const char *src);(2) 函数说明dest 为目标字符串指针,src 为源字符串指针,该函数把src所指的由NULL结束的字符串复制到dest 所指的数组中
生成连连看地图(难度:1颗星) 问题描述:输入m和n(保证m*n是偶数),生成一个m*n的二维矩阵,其中用数字1-5来表示不同的图案,需要满足每一个数字在矩阵中出现的次数为偶数,并且是随机的。问题分析:为了要保证每个数字都是随机的,肯定要用到srand函数为了要每个数字在矩阵中出现的次数是偶数,并且要控制进行的次数,最后是先产生矩阵个数的一半,然后另外一个复制前面一半的值,这样就可以保证偶数的条件在做完第二步之后,我们需要进
尼克切斯定理(难度:2颗星) 问题描述:根据尼克切斯定理的描述,任何一个正整数N的立方都可以写成一串连续奇数的和,根据该定理,我们输入一个N(N的范围是【2,1000】),输出N的立方所有能够满足的等式(连续奇数序列的长度必须大于1才输出)。输入样例: 5输出样例: 5 * 5 * 5 = 125 = 21 + 23 + 25 + 27 + 29首先我们先分析一下这个问题: 1. 假设n 的立方等于cube,并且cube
哥德巴赫猜想(难度:1颗星) 问题描述:哥德巴赫猜想的一种描述是,大于4的正偶数(我们假定1不是质数)都能分解成两个质数之和,我们假设这个猜想成立,我们现在输入一个大于4的正偶数N,输出所有能够满足哥德巴赫猜想的等式。(其中N的范围是【4,100000000】)输入样例: 100输出样例: 100 = 3 + 97 100 = 11 + 89 100 = 17 + 83 100 = 29 + 71 100 = 41
输出三角形面积和类型(难度:半颗星) 问题描述:输入三条边的边长,如果这三条边可以构成三角形,输出三角形的面积(保留到小数点后6位)和类型,否则输出“不能构成三角形”PS:从上到下依次检测三角形的类型,只要有一个满足后面不用再检测了,直接输出即可:等边三角形 等腰三角形 直角三角形 普通三角形参考代码#include <stdio.h>#include <math.h>int main(){ double a, b,
求a的b次幂的最后3位(难度:1颗星) 问题描述:输入a,b,其中a和b的范围是【2,999999999】,求出a的b次幂的最后3位。PS: 如果最后三位是001,那么输出1就可以了。问题分析:这个问题的实际上是求a的b次幂mod 1000的结果,把这个问题一般化,实际上是a的b次幂mod n的结果。(X*Y)%Z=((X%Z)*(Y%Z))%Z 根据蒙格马利快速幂模算法,我们可以方便求解,下面举个例子。2^7:2*2*2*2*2*2
打渔晒网问题(难度:1颗星) 问题描述:如果1个渔夫从2011年1月1日开始每3天打一次渔,两天晒一次网,编程实现当输入2011年1月1日之后的任意1天,输出该渔夫是在打渔还是在晒网。输入样例 2011 5 5输出样例 晒网参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int IsLeapYea
自己实现fmod函数 问题描述:自己实现一个MyFmod函数,要和C语言库函数的fmod函数完成同样的功能。问题分析: 首先我们要了解一下fmod函数它到底做了什么事情(1) 函数原型 double fmod (double x, double y);(2) 函数说明fmod() 用来对浮点数进行取模(求余)(3) 返回值 返回取模后的结果res,res的绝对值一定会小于y的绝对值根据以上的描述,我们可以来实
自己实现atoi函数 问题描述:自己实现一个MyAtoi函数,要和C语言库函数的atoi函数完成同样的功能。问题分析: 首先我们要了解一下atoi函数它到底做了什么事情(1) 函数原型 int atoi (const char * str);(2) 函数说明atoi函数会扫描参数 str 字符串,跳过前面的空白字符(下面会解释空白字符),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’
找出这个数(难度:半颗星) 求一个正整数,这个数满足如下条件: 1. 这个数的平方必须是四位数 2. 这个数的三次方必须是六位数 3. 而且这四位数和六位数每位数都不一样。参考代码:#include <stdio.h>int main(){ int i, j, GoNextLoop, flag[10], nCnt; for (i = 32; i < 100; i++)//在平方必须是四位数的范围内
打印九九乘法表(难度:半颗星) 问题描述:打印小学课本的九九乘法表。参考代码:#include <stdio.h>int arr[100][100];int main(){ int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%d ", i, j,
杨辉三角(难度:半颗星) 输入杨辉三角的行数,并打印出来。例如,输入行数为5打印结果: 1 1 1 1 2 1 1 3 3 11 4 6 4 1参考代码:#include <stdio.h>int arr[100][100];int main(){ int n, i, j; printf("输入杨辉三角的行数:"); s
输出正整数二进制的位置(难度:半颗星) 问题描述:输入一个正整数,输出这个正整数转换成二进制后的1的位置。例如: 输入:11 输出:1 2 4PS:11转成二进制位1011(从左到右,从1开始数)参考代码:#include <stdio.h>int main(){ int num, temp = 1, nCnt = 1; scanf_s("%d", &num); while (temp <= num)
最大公约数和最小公倍数(难度:半颗星) 问题描述:输入两个正整数,输出两个正整数的最大公约数和最小公倍数。例如: 输入:30 50 输出: 最大公约数:10 最小公倍数:150思路1: 如果输入a,b,求出a,b总较小的那个赋值给c,在【c,1】这个范围内从大到小遍历,能同时被两个数整除即为最大公约数d,最小公倍数即为a*b/d。思路2: 利用辗转相除法,根据定理gcd(a, b) = gcd(b, a%b)方法1: 按照思
分解质因数(难度:半颗星) 问题描述:输入一个正整数,输出它的质因数分解的结果。 PS:质因子从小到大排列例如: 输入:30 输出:30=2*3*5输入:5 输出:5=5参考代码:#include <stdio.h>int main(){ int i, n; printf("输入一个正整数n:"); scanf_s("%d", &n); printf("%d=", n); fo
根据日期判断天数(难度:半颗星) 问题描述:输入一个日期,判断这一天是这一年的第几天,如果输入日期不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”输入样例: 2008 3 20输出 这是 2008 年的 第 80 天参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31
计算两个日期的间隔天数(难度:1颗星) 问题描述:输入两个日期,日期的格式由3个正整数组成(正整数之间用空格分开),计算两个日期的差值(不管第一个输入的日期大还是第二个输入的日期大,始终用大的那个日期减去小的那个日期),如果两个日期中有一个不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”,否则输出两个日期的差值。输入举例:1999 1 21 2000 1 21那么输出的相隔的天
完全平方数(难度:半颗星) 问题描述:找出范围是【0, 1000000】并且满足下面条件的整数,条件1: 它加上100是一个完全平方数 它加上268也是一个完全平方数输出所有满足条件的数。参考代码:#include <stdio.h>#include <math.h>int main(){ int i, temp1, temp2; for (i = 1; i <= 1000000; i++) {
贪吃蛇智能版(初级) 说明:贪吃蛇智能版(初级),在上一篇文章《C语言+easyX界面库实现贪吃蛇》的基础上,增加了智能模式的实现。 初级版本,主要是利用了广度寻路算法,能够搜索出一条从蛇头到目标食物点的一条可行的最短的路径,并且在蛇运动的过程当中,实时的调整这一条可行路径。吃食物的策略是优先吃大食物,然后吃小食物,因为大食物分数多,如果不吃,过一会就会消失,下面参考具体代码:PS:如果有设计和思路上面的问题,请参考贪
贪吃蛇系列开篇----设计智能贪吃蛇小游戏 问题描述:贪吃蛇这个游戏已经是大家都非常熟悉的经典游戏了,我用简短的话概述一下,就是用户使用上、下、左、右四个方向键控制贪吃蛇的运动方向,保证蛇在既不撞墙,又不撞到自己身体的前提下,安全的吃到美味的食物。起因:当时无意中我看到了有人做了一个具有一定智能的贪吃蛇,虽然那个贪吃蛇还不够聪明,我当时的想法就是设计完成一个贪吃蛇游戏,让我做出来的这条蛇比我看到的那条更加的聪明。首先必须要做的:为了最终让我的
叠数求和(难度:半颗星) 问题描述: 如果一个数的每个为的值都相同,我们成为叠数,求下面叠数的和。 求Sn = a + aa +aaa+ … +aa…a之值,其中a是一个数字,n表示a的位数。 例如:输入a=2,n=5 输出:24690 因为:2+22+222+2222+22222 = 24690参考代码:#include<stdio.h>#include<string.h>int main(){
百钱买百鸡问题(难度:半颗星) 问题描述:一只公鸡5钱,一只母鸡3钱,3只小鸡1钱,百钱买百鸡(100钱必须花完,买到的鸡也必须是100只),输出所有的购买方案。例如: 0只公鸡,25只母鸡,75只小鸡是符合要求的, 因为 0 * 5 + 25 * 3 + 75 / 3 = 100 并且 0 + 25 + 75 = 100参考代码:#include <stdio.h>#include <string.h>int main()
数据插入到有序数组(难度:半颗星) 问题描述:输入一个有序的整数序列(从小到大排列),然后再输入一个需要插入到数组中的整数,输出插入数据之前和之后的数列。(要保证插入数据之后数列仍然是从小到大排列)。例如: 输入数列: 1 2 4 5 待插入数据: 3插入数据后的数据: 1 2 3 4 5参考代码:#include <stdio.h>int arr[100];int main(){ char ch = ' ';
输出满足各位数之和被23整除的数(难度:半颗星) 输出一个范围在【1,1000】并且各位数之和能被23整除的所有数。例如: 599 5 + 9 + 9 = 23,满足能被23整除的条件,所以应该输出。参考代码:#include <stdio.h>#include <string.h>int main(){ int i, temp, sum; for (i = 1; i <= 1000; i++) { t
修改百位上的值(难度系数:半颗星) 输入一个大于100的整数,把原数的百位改成6,输出修改后的数(如果原来百位已经是6直接输出)。例如: 输入:123456 输出:123656方法1: 把数的百位取出,然后加上和6的差值乘以100就可以了参考代码:#include <stdio.h>int main(){ int n, temp; scanf_s("%d", &n); printf("修改前:");
打印螺旋队列(更简单的方法)(难度:1颗星) 输入n*n矩阵的n值,打印出一个螺旋矩阵,如下面例子:当n= 5时,输出 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9更简单的方法1:根据x,y的坐标值,然后通过计算,直接打印对应的值,以中
数列的逆序数对(难度系数:2颗星) 给定一个数列,求数列的逆序数对总个数(逆序数对就是指数列中的两个数,排在前面的数比排在后面的数大,这样就构成了一个逆序数对)。例如: 4 2 1 3这个数列的逆序数对有: (4, 2);(4, 1);(4, 3);(2, 1);总共有4个逆序数对。PS:其实完全是使用了归并排序的思想,只是在合并的时候多加了一句统计该范围内的逆序数的个数,我们累加每一个小区间的逆序数个数,自然就得到了整个数列的逆序数
排序算法之归并排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99归并排序是分之思想的典型应用,首先对N个元素进行排序是一个大的问题,我们把它对半拆分成左右两个部分,这样对N个元素排序的问题,就拆分成对【0,(N - 1)/2】和【(N - 1)/2+
输出螺旋数组(难度:1颗星) 输入n*n矩阵的n值,打印出一个螺旋矩阵,如下面例子:当n= 5时,输出 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9方法1: 用静态的二维数组保存,到方法2在动态生成,随着n的变化而变化
数组逆序(难度系数:半颗星) 输入一个数组,把该数组的元素逆序,然后输出。方法1: 使用异或的方法来进行交换,是一种很完美的方法,这种方法主要利用了异或的特性a^b的值先保存到a,因为a^b^b = a所以可以顺利完成交换。参考代码:#include <stdio.h>#include <malloc.h>int main(){ //使用异或的方法来进行交换,是一种很完美的方法, //这种方法主要利用了异或
删除数组指定的元素(难度:半颗星) 给定一个数组,删除数组中指定的元素方法1: 把不等于要删除的数全部按照顺序从0开始排起,最后改变原数组的长度即可参考代码:#include<stdio.h>void DeleteElementFromArray(int *pArray, int* pnCount, int nDeleteNum){//思路:把不等于要删除的数全部按照顺序从0开始排起,最后改变原数组的长度即可 int i,
排序算法之快速排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99快速排序的基本思想是,找出一个分界的数num,把不大于num的数全部放在它左边,把不小于num的数全部放在它右边,然后对左右区间做相同的操作,直到各个区间都只有一个数位置,下面来看一下具
排序算法之希尔排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99希尔排序,首先选定步长值,选定的方法一般是从数组个数n/2开始,依次往下除以2,直到步长减少到1为止,选好步长之后,我们在每个步长值上,进行插入排序,使得该步长范围的数列都是有序的,随着
排序算法之插入排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99插入排序,就是从第二个数开始(因为第一个数肯定是排好了的),如果比前面的数大,那就什么都不用做,因为已经有序了,如果比前面的小,往前面进行查找,寻找合适的位置进行插入,每个数都进行这样的
正整数表示为连续自然数的和(难度:1颗星) 问题描述:输入一个正整数N,输出能相加等于N的联系序列的和(序列必须多于1项),如果这种序列存在,则输出所有这样的序列,如果不存在,则输出NULL。例如:输入为15 输出: 1+2+3+4+5=15 4+5+6=15 7+8=15首先我们先分析一下这个问题: 1. 首先1和2是不能表示成连续的自然数之和的,所以我们从3开始 2. 假设n可以表示成连续的自然数之和【s,t】,那么根据求
控制台控制光标位置 问题描述:通过控制光标位置,在控制台上打印如下面语句: 输入第十天的果子数:__ 个其中__是让用户填入的一个正整数,并且在用户输入的过程中,“个”会跟随着数字往后移动。参考代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <conio.h>#include<windows.h>void setcursor(int x, i
排序算法之选择排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99选择排序,就是第一步从所有的数据中选出最小的数放在第一个位置,然后从剩下的数中选出最小的放在第二个位置,以此类推,就能从小到大排好所有的数,下面来看一个具体的过程:下标值序号: 0 1
排序算法之冒泡排序 问题描述:输入一个原始数列,把它进行升序排序,从小到大输出。例如:给定数列如下: 5 15 99 45 12 1 90 19 33 41排序后的结果为: 1 5 12 15 19 33 41 45 90 99冒泡排序顾名思义,就是让小的数一个一个的冒到上面来(最上面就是我们数组下标0),那么具体的做法是,从后往前两两进行比较,让两者中较小往上升,大家看一下下面这个过程:下标值:
质数的和(多种方案) 求某个范围内质数的和,例如输入100,则求出小于100的质数和。PS:下面的三种方法会逐步缩小遍历查找的范围方法1:#include<stdio.h>int IsPrime(int n){//判断n是否为质数,如果是返回1,否则返回0 int i; for (i = 2; i < n; i++)//这个地方的遍历范围是【2,n】,在方法2中会缩小遍历范围 {
经典面试题(五) 第九题:判断一个数是否为2的幂次(例如1,2,4,8…..),不能使用循环。参考代码:#include <stdio.h>int IsPower(int n){//判断一个数是否为2的幂次,如果是返回1,否则返回0 return 0 == (n & (n - 1));}int main(){ printf("%d", IsPower(4)); return 0;}
经典面试题(四) 第七题:下面代码printf打印的结果是多少?#include <stdio.h>int main(){ unsigned int a = 0xfffffff7; unsigned char ch = (unsigned char)a; char* b = (char*)&a; printf("%08x, %08x", ch, *b); return 0
输出平行四边形图案(多种方案) 问题描述: 使用*在控制台打印平行四边形 例如:平行四边形中最长的一行输出的*是5个,则平行四边为:*************** **** *** ** *方法1: 把平行四边形分成上下两个部分,循环打印。参考代码:#include<stdio.h>int main(){ int nStarNumber, i, j; printf("输入平行四边
经典面试题(三) 第五题:下面代码printf打印的a和x值分别是多少?PS:大家注意和第四题进行比较,第四题在另外我的另外一篇文章,点击链接: http://blog.csdn.net/yi_ming_he/article/details/71274470#include <stdio.h>int main(){ int a, x; for (a = 0, x = 0; a <= 1 && !x
经典面试题(二) 第三题:下面代码printf打印的结果是多少?#include <stdio.h>int main(){ int n = 9999; int nCount = 0; while (n) { nCount++; n = n & (n - 1); } printf("%d", nCount); return 0;
二叉树遍历(非递归版) 问题描述: 以一定的方式输入数据(本文是以先序遍历的方式输入),程序根据数据进行解析,创建二叉树,然后对二叉树进行操作,主要操作包括以下几种:***1. 求二叉树的高度 2. 先序遍历二叉树 3. 中序遍历二叉树 4. 后序遍历二叉树 5. 层序遍历二叉树*先序遍历: 根节点->左子树->右子树 中序遍历: 左子树->根节点->右子树 先序遍历: 左子树->右子树->根节点 层序遍历
C语言中交换两个数的方法 问题描述:程序中有两个数a,b,其中a=4,b=5,现在希望交换两个数的值,使得a=5,b=4.在这里我总结了一下目前我已经掌握的C语言中交换两个数的方法,主要如下几种,下面我将分别来进行介绍。方法1: 使用一个临时变量来进行保存,这应该也是大家最容易想到的方法,话不多说,直接上代码。参考代码:#include <stdio.h>int main(){ int a = 4; int
二叉树遍历(递归版) 问题描述: 以一定的方式输入数据(本文是以先序遍历的方式输入),程序根据数据进行解析,创建二叉树,然后对二叉树进行操作,主要操作包括以下几种:***1. 求二叉树的高度 2. 先序遍历二叉树 3. 中序遍历二叉树 4. 后序遍历二叉树 5. 层序遍历二叉树*先序遍历: 根节点->左子树->右子树 中序遍历: 左子树->根节点->右子树 先序遍历: 左子树->右子树->根节点 层序遍历
经典面试题(一) 题目1: 对于下面的代码,下面说法正确的是: A:main函数中i是一个未定义的值 B:main函数中i的值是1 C:编译器不运行这样做 D:main函数中i的值是0#include <stdio.h>int a = 1;int main(){ int a = a; printf("%d", a); return 0;}答案:APS: 这段代码在VS200
压缩数据 给定一串数据,按照规律进行压缩,比如: 压缩前:1,1,1,1,2,2,2,3,8,3,1,1,2,7 压缩后:4,1,3,2,-3,3,8,3,2,1,-2,2,7参考代码1:#include <stdio.h>#include <malloc.h>#include <math.h>enum EmState{ emInit = 0, emSame = 1,
输出图案(六)---输出空心矩形 输入矩形的宽,高,输出该空心矩形,用*来进行表示参考代码1:#include <stdio.h>int main(){ int w, h, i, j; printf("输入矩形的宽和高"); scanf_s("%d%d", &w, &h); for (i = 0; i < h; i++) { for (j = 0; j < w; j++)
简单求和题(初学) 输入一个范围【a,b】,输出这个范围内所有的偶数和参考代码1:#include <stdio.h>int main(){ int start, end, i, sum = 0; printf("输入两个数表示范围的左边和右边"); scanf_s("%d%d", &start, &end); start = start % 2 == 0 ? start : st
使用switch-case语句输出成绩等级 问题描述: 输入一个0-100范围内发分数,在不同的等级范围内输出不同的值,要求使用switch-case控制 【0,60) 等级为E 【60,70) 等级为D 【70,80) 等级为C 【80,90) 等级为B 【90,100】 等级为A参考代码:#include <stdio.h>int main(){ double score; int nKey;
贪吃蛇智能版(专家) 在高级版本的基础之上,主要针对以下问题进行了处理: 当长度逐渐变成,超过100之后,随机wander+追尾有比较大的随机性,弄不好就把自己围死了,这个时候已经不能再看到实物马上就去吃了,在吃之前必须先调整好自身的状态,等到认为调整的差不多的时候,在冲过去吃实物。主要增加了判断往上下,往左右那个更有的判断方法,并且加上了判断当前状态是否已经调整就绪,在吃完实物之后重新调整状态,再次出发。参考代码:
用位操作改变内存中的值 问题描述: 对下面代码中的a进行位操作(只能进行位运算),实现输出OPQint a = 0x434241; printf(“%s”, (char*)&a);参考代码1:(使用异或操作)#include <stdio.h>int main(){//异或(^)的方法,最后结果为OPQ对于0x51504f,把原来的数0x434241异或上某个数得到,根据异或的性质,相同数异或得0,不同数异或得
贪吃蛇智能版(高级) 说明: 在贪吃蛇智能版(中级)的基础之上,增加了判断小食物是否安全的方法,并且增加了在寻找食物路径失败和寻找尾巴失败之后,会进行一小段的随机溜达,直到重新找到路径为止,当然这段溜达会有一定风险,这个在后面会想办法改进,再改进的版本希望能更上一层楼,姑且叫做专家版吧。参考代码: easysnake.h:#pragma once#include <stdio.h>#include <graphic
贪吃蛇智能版(中级) 说明: 相对于上一个版本,这次主要完善了一下智能模式,虽然蛇有了一定的智能,但是仍然有一定的局限性,局限性体现在看得不够远,所以目前智能称为中级,附上代码:easysnake.h#pragma once#include <stdio.h>#include <graphics.h>#include <windows.h>#include <mmsystem.h>#include <time.
二维数组的动态申请空间并参数传给函数 说明: 1. 二维数组动态创建 2. 把二位数组作为参数传递给函数参考代码:#include <stdio.h>#include <stdlib.h>void func(int** pArray, int m, int n){ for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++)
C语言+easyX界面库实现贪吃蛇 问题描述: 实现贪吃蛇游戏,有等级,分数,并且会保存最高等级和最高分easysnake.h代码:#pragma once#include <stdio.h>#include <graphics.h>#include <windows.h>#include <mmsystem.h>#include <time.h>#include <conio.h>#include "resource.
找规律输出正方形(难度系数:2) 题目描述: 如图所示, 有一个边长为2的幂次的正方形,比如图中边长为4的正方形,标记了5*5个数字,通过这些数字,依次输出的正方形如下: 0 4 20 24 0 2 10 12 0 1 5 6 1 2 6 7 5 6 10 11 6 7 11 12 2 4 12 14 。。。。 根据上述规律,在输入正方形边长的情况下,输出正方形参考代码:#include <stdio.h>vo
用位操作实现加法运算 问题描述: 对下面代码中的a进行位操作(只能进行位运算),实现输出OPQint a = 0x434241;printf("%s", (char*)&a);参考代码:#include <stdio.h>int add(int a, int b){ //思路: a+b=a^b + (a&b)<<1;其中a^b是不考虑进位的加,只有位相同才有进位所以(a&b)<<1则是进位的值,
迭代法计算平方根(难度系数:2颗星) 输入1个正数,求其平方根(不能使用sqrt库函数)PS:参考代码中给出了两种迭代方式进行比较:1. 公式迭代 2. 二分迭代 参考代码:#include <stdio.h>double GetAbsoluteValue(double num){ return num > 0 ? num : -num;}double GetSqrt2(double num){ //此题进行一
KMP快速查找字符串 问题描述: 使用KMP算法快速查找字符串(可支持中文)PS: 解析KMP的方法虽然多种多样,但是我仍然最喜欢数据结构书中我认为最经典的那种 参考代码:#include <iostream>#include <string>#include <vector>using namespace std;int KMPAlgorithm(const wstring& strText, const
基本数据类型作业 第一题:给标识符增加数据类型PS: 1. 姓名和学校名用字符数组表示,姓名不超过一般都不超过32个字符,这里之所有用32而不是30,主要是因为32是2的幂次,计算机处理速度会更快 2. 年龄之所有用unsigned char而不用char,考虑到可能有些人的年龄会超过127岁,但是应该没有人会超过255岁,1个字节完全足够了 3. 身高(单位:厘米),体重(单位:公斤),这里使用浮点型来表示更
运算符作业 作业描述: 参考代码:#include <stdio.h>int GetAbsoluteValue(int num)//求绝对值{ return num > 0 ? num : -num;}double GetAbsoluteValue2(double num){ return num > 0 ? num : -num;}double GetSqrt(double num)
控制台输出人走路的动态图 输出人走路的动态图,无论用什么字符表示都可以参考代码:#include <stdio.h>#include<windows.h>#define POSX 20#define TIME 250char str1[][100] = {{" 11"}, {" #hL y "}, {" #hhhhhh1
随机生成数字放入数组(难度系数:1颗星) 随机生成1-6的数字放入到大小为56的数组中,保证数组最终每个数字出现的次数均为偶数。参考代码1:#include <stdio.h>#include <time.h>#define TOTALNUM 56int arr[TOTALNUM];int main(){ int i; srand((unsigned int)time(NULL)); for (i = 0;