覆盖数字--英雄会pongo
更多精彩:http://blog.csdn.net/xjm199
给定整数区间[a,b]和整数区间[x,y],你可以使用任意多次a,b之间的整数做加法,可以凑出多少个[x,y]区间内的整数? 输入 a,b,x,y,其中1<= a < b <= 1000000000, 1 <= x < y <= 1000000000。 输出: 用[a,b]内的整数做任意多次加法,可以得到多少个[x,y]内的整数。 例如a = 8, b = 10, x = 3 , y = 20 我们可以得到 [3..20]之间的整数 8, 9, 10, 16 ( 8 + 8), 17(8 + 9), 18(9 + 9), 19(9 + 10), 20(10 + 10),因此输出8。 问:2+3=5 1+4=5 这算1个还是2个? 答:算1次 问你能覆盖多少个不同的数字 [x,y]全覆盖住得话 就是y - x + 1。
VC++窗口重绘
窗口重绘
//CString str("维新科学技术培训中心");
CString str;
str="维新科学技术培训中心";
pDC->TextOut(50,50,str);
str.LoadString(IDS_STRINGVC);
pDC->TextOut(0,200,str);
插入符(文本插入符, 图形插入符)
文本操作符,图形操作符
/*//创建设备描述表
CClientDC dc(this);
//定义文本信息结构体变量
TEXTMETRIC tm;
//定义设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据字体大小,创建合适的插入符
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);*/
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
//显示插入符
ShowCaret();
杨辉三角的变形
更多精彩:http://blog.csdn.net/xjm199/article/details/17514877
1
1 1 1
1 2 3 2 1
1 3 6 7 6 3 1
以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。 输入n(n <= 1000000000)
画刷绘图MFC
//位图画刷
CBitmap bitmap;
//加载位图
bitmap.LoadBitmap(IDB_BITMAP1);
//创建画刷
CBrush brush(&bitmap);
//创建并获得设备描述表
CClientDC dc(this);
//矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
使用画刷绘图
//位图画刷
CBitmap bitmap;
//加载位图
bitmap.LoadBitmap(IDB_BITMAP1);
//创建画刷
CBrush brush(&bitmap);
//创建并获得设备描述表
CClientDC dc(this);
//矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
绘制直线MFC
MFC初学,绘制直线
CPen pen(PS_DOT,1,RGB(0,255,0));
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
建立信号基站
更加精彩:http://blog.csdn.net/xjm199
要建立一个信号基站服务n个村庄,这n个村庄用平面上的n个点表示。假设基站建立的位置在(X,Y),则它对某个村庄(x,y)的距离为max{|X – x|, |Y – y|}, 其中| |表示绝对值,我们的目标是让所有村庄到信号基站的距离和最小。 基站可以建立在任何实数坐标位置上,也可以与某村庄重合。 输入: 给定每个村庄的位置x[],y[],x,y都是整数,满足: -1000000000 < x,y < 1000000000 村庄个数大于1,小于101。 输出: 所有村庄到信号基站的距离和的最小值。 关于精度: 因为输出是double。我们这样判断对错,如果标准答案是A,你的答案是a,如果|A – a| < 1e-3 我们认为是正确的,否则认为是错误的。 样例: 假设有4个村庄位置分别为 (1,4) (2,3) (0,1) (1,1) 我们的结果是5。因为我们可以选择(1.5,2.5)来建立信号基站。 bestDistance = max(|1.5-1|, |2.5-4|) + max(|1.5-2|,|2.5-3|) + max(|1.5-0|,|2.5-1|) + max(|1.5-1|,|2.5-1|) = max(0.5, 1.5) + max(0.5,0.5) + max(1.5,1.5) + max(0.5,1.5) = 1.5 + 0.5 + 1.5 + 1.5 = 5 函数头部: C/C++ double bestDistance(int n, cons int *x, const int *y); Java class Main() { public static double bestDistance(int [] x,int [] y); }
挑战规则:
main函数可不用完成。
理想随机数发生器
更加精彩(个人博客):http://blog.csdn.net/xjm199
一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R(a), R(b),问R(a) + R(b) <= c的概率有多大?
输入: 正整数a,b,c。正整数均不超过10000
输出: R(a) + R(b) <= c的概率。注意输出是一个有理数(分数),请化为最简分数。(分子分母的最大公约数是1)。
例如 输入a = 1, b = 1, c = 4,输出"1/1"
最小操作次数的简易版--英雄会
更加精彩:http://blog.csdn.net/xjm199
给定两个字符串,仅由小写字母组成,它们包含了相同字符。 求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。 例如给定两个字符串“abcd" "bcad" ,输出:2,因为需要操作2次才能把"abcd"变成“bcad" ,方法是:abcd->cabd->bcad。
整数取反,人人code
个人博客:http://blog.csdn.net/xjm199
题目很简单,完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x=123,return321 x=-123,return-321
[纠错]直方图中矩形最大面积
由于个人原因,上次上传的是练习的,有写问题,这是自己修改后的...
直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]; 那么上述直方图中,面积最大的矩形面积 = 10单位
寻找直方图中面积最大的矩形
给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。 如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]: 那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。 请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。
最长有效括号的长度
http://blog.csdn.net/xjm199/article/details/17440389
博客中有详细叙述,大家多交流
给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于"( () () )",它的长度为6。
c/c++二分查找修改版
if high < low return 1; 找不到
int middle low + high 2; 二分
if x s[middle] return middle; 找到并返回
else if x < s[middle] 关键字小于中值 继续二分查找 并将上限改为middle
BinarySearch s x low middle 1 ;
else 关键字大于中值 继续二分查找 并将下限改为middle
BinarySearch s x middle + 1 high ;">if high < low return 1; 找不到
int middle low + high 2; 二分
if x s[middle] return middle; 找到并返回
else if x < s[middle] 关键字小于中值 继续二分查找 并将上限改为middle
BinarySearch s x low middle 1 ;
el [更多]
二分查找修改版
if( high < low) return -1; //找不到
int middle = (low + high) / 2; //二分
if( x < s[middle]) //关键字小于中值,继续二分查找,并将上限改为middle
BinarySearch(s, x, low, middle - 1);
else if( x > s[middle]) //关键字大于中值,继续二分查找,并将下限改为middle
BinarySearch(s, x, middle + 1, high);
else
return middle; //找到并返回
c_library库函数
函数名: open
功 能: 打开一个文件用于读或写
用 法: int open(char *pathname, int access[, int permiss]);
程序例:
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int handle;
char msg[] = "Hello world";
if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1)
{
perror("Error:");
return 1;
}
write(handle, msg, strlen(msg));
close(handle);
return 0;
}
如何学好编程
不错的总结材料(转的)做成pdf版便于阅读
方法(一)
编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的《游戏之旅--编程感悟》和梁肇新的《编程高手箴言》我突然知道我要从何说起,我要怎么说了!
大整数相乘vector容器
对大整数相乘进行运算,如超过int long等范围的运算,有大量注释,简单易懂,vector容器实现,较于数组更加方便。
亲密数Close
一个关于亲密数的实现方法,另外注释的是将其因子输出的,copy自百科,如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对。
钢条切割-【算法导论-动态规划】
对以上的价格表样例,进行模拟切割:
r1 = 1,切割方案1 = 1(无切割)
r2 = 5,切割方案2 = 2(无切割)
r3 = 8, 切割方案3 = 3(无切割)
r4 = 10, 切割方案4 = 2 + 2
r5 = 13, 切割方案5 = 2 + 3
r6 = 17, 切割方案6 = 6(无切割)
r7 = 18, 切割方案7 = 1 + 6或7 = 2 + 2 + 3
r8 = 22, 切割方案8 = 2 + 6
r9 = 25, 切割方案9 = 3 + 6
r10 = 30,切割方案10 = 10(无切割)
可能现在大家对这种切割比较不耐烦,或者是有的数并不是那么好,怎么办?
这时有个很好的思想,就是动态规划,之前模拟切割尽管结果出来的很简单,但是过程却依然很复杂;
比如r7,它有很多切割方案,1-6,2-5,3-4,2-2-3,1-1-5等等,这些过程如何自己来模拟的话实在是太费时间,但是我们想在切割7的时候前面都已经完成了,我们可以在前面的基础上进行切割,这时只要考虑1-6,2-5,3-4即可,比如现在的1-6就包括了之前的1-1-5,1-2-4等的切割方案;
插入排序-《编程珠玑》
详见:http://blog.csdn.net/xjm199/article/details/22733437
简而言之,就是将一个数据很好的插入已经有序的数列中,当然,依然是递增或是递减;
思想:首先第一个数据肯定是有序的,由第二个数据开始处理,进行插入排序:
变位词《编程珠玑》
若是不明白,详见http://blog.csdn.net/xjm199/article/details/21628091
变位词:一种把某个词或句子的字母的位置(顺序)加以改换所形成的新词,英文叫做anagram,词典把这个词翻译成“变位词”。
书中将这个程序按三个阶段的“管道”组织,其中一个程序的输出文件作为下一个程序的输入文件。第一类程序标识单词,第二个程序排序标识后的文件,而第三个程序将这些单词压缩为每个变位词类一行的形式。
位图排序《编程珠玑》
详见:http://blog.csdn.net/xjm199/article/details/21476491
实现位图排序,其中假设n为10 000 000,且输入文件包含1 000 000个正数;具体细节详见《编程珠玑》第一章问题;
由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数的产生问题,有数重复,在此并未处理);
二叉搜索树三种访问方式
http://blog.csdn.net/xjm199/article/details/20062209
更详细,大家多多交流。
先序遍历:也叫做先根遍历,前序遍历,可记做根左右(二叉树父结点向下先左后右)。首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
即:若二叉树为空则结束返回,否则:(1)访问根结点(2)先序遍历左子树(3)先序遍历右子树
中序遍历:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
即:若二叉树为空则结束返回,否则:(1)中序遍历左子树(2)访问根结点(3)中序遍历右子树
后序遍历:首先遍历左子树,然后遍历右子树,最后遍历访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。
即:若二叉树为空则结束返回,否则:(1)后序遍历左子树(2)后序遍历右子树(3)访问根结点
倒排索引处理文档
更多精彩:http://blog.csdn.net/xjm199/article/details/18348671
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
有两种不同的反向索引形式:
1、一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。
2、一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。
堆排序(最大堆修改版)【算法导论】
更多精彩:http://blog.csdn.net/xjm199
上个资源的有效排序下标是由1开始的,0只做了填充作用,这次则由下标0为根节点:
for(int i = length; i >= 1;) //最后一个肯定是最小的
{
temp = A[i]; //交换堆的第一个元素和堆的最后一个元素
A[i] = A[0];
A[0] = temp;
i--; //堆的大小减一
MaxHeapIfy(A, i, 0); //调堆
}
堆排序最大堆【算法导论】
更多精彩:http://blog.csdn.net/xjm199
欢迎多多交流
ps:按照书中伪码写成,元素由1开始,故数组中第一位A[0]为填充,并不算在排序中。
for(int i = length; i >= 2;)
{
temp = A[i]; //交换堆的第一个元素和堆的最后一个元素
A[i] = A[1];
A[1] = temp;
i--; //堆的大小减一
MaxHeapIfy(A, i, 1); //调堆
}
二十进制数的加法【庞果网英雄会】
更多精彩:http://blog.csdn.net/xjm199
多多交流....
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
printf("%s",calculate("jaa","aa"));
return 0;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
菜单命令的路由【VC++】
更多精彩:http://blog.csdn.net/xjm199
void CProject004View::OnTest()
{
// TODO: Add your command handler code here
}
给定某年某月,输出该月日历
更多精彩:http://blog.csdn.net/xjm199/article/details/17710431
继给定两个日子计算相差天数和给定某个日子,返回在一周的第几天,接下来还有一个给定某年某月,输出该月日历;
其实思想很简单,都是与1900-1-1相减,这样得到每月的第一天星期几,这样便于输出第一行;
接下来将该月剩下的输出即可:
给定一个日子,返回是一周的第几天
更多精彩:http://blog.csdn.net/xjm199/article/details/17708935
case 0: //今天是星期一...
printf("Today是一周的第2天\n");
break;
case 1: //今天是星期二...以此类推
printf("Today是一周的第3天\n");
break;
case 2:
printf("Today是一周的第4天\n");
break;
case 3:
printf("Today是一周的第5天\n");
break;
case 4:
printf("Today是一周的第6天\n");
break;
case 5:
printf("Today是一周的第7天\n");
break;
case 6:
printf("Today是一周的第1天\n");
break;
default:
break;
两个日期相差的天数【编程珠玑】
更多精彩:http://blog.csdn.net/xjm199
int isleapyear(int year) //是否是闰年
{
return ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0);
}
均分01【庞果网 英雄会】
更多精彩:http://blog.csdn.net/xjm199
给定一个字符串,长度不超过100,其中只包含字符0和1,并且字符0和1出现的次数都是偶数。你可以把字符串任意切分,把切分后的字符串任意分给两个人,让两个人得到的0的总个数相等,得到的1的总个数也相等。 例如,输入串是010111,我们可以把串切位01, 011,和1, 把第1段和第3段放在一起分给一个人,第二段分给另外一个人,这样每个人都得到了1个0和两个1。我们要做的是让切分的次数尽可能少。 输入是这样一个字符串,输出是最少的切分次数,保证输入合法。 注:题目一定有解,因为我们最差情况时,把字符串切分(n - 1)次形成n个长度为1的串。
数组排序【庞果网、英雄会】
更多精彩:http://blog.csdn.net/xjm199
本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”->“我要发布”内),
以下是题目详情: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。
例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。
函数头部: C/C++ int run(const int *a,int n); java class solution { public static int run(int [] a) }
VC++菜单命令响应函数
http://blog.csdn.net/xjm199
void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
MessageBox("Test Click!");
}
VC++设置字体字幕变色
更多精彩:http://blog.csdn.net/xjm199
m_nWidth+=5;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rect;
rect.left=0;
rect.top=200;
rect.right=m_nWidth;
rect.bottom=rect.top+tm.tmHeight;
dc.SetTextColor(RGB(255,0,0));
CString str;
str.LoadString(IDS_STRINGVC);
dc.DrawText(str,rect,DT_LEFT);
rect.top=150;
rect.bottom=rect.top+tm.tmHeight;
dc.DrawText(str,rect,DT_RIGHT);
CSize sz=dc.GetTextExtent(str);
if(m_nWidth>sz.cx)
{
m_nWidth=0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}
VC++字符输入
更多精彩:http://blog.csdn.net/xjm199
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar) //回车
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar) //退格
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
CView::OnChar(nChar, nRepCnt, nFlags);
MFC路径【VC++】
更多精彩:http://blog.csdn.net/xjm199
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);