由于今天早上在计算机网络实验课程上去一个网站做了个简单的题目,但是后面却是提交了三次都还是错误Wrong Answer,原因就是出在一个排序上,所以今晚又瞄了一下那个关于冒泡排序的算法。

(其实真心很简单,只是我初学者太菜所以排序那里没弄得),想在这里写下今天今天的收获吧,下面是我今天做的题目:

描述
N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。
现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。
帽子的颜色用“red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。
白鼠的重量用整数表示。

输入
输入第一行为一个整数N,表示小白鼠的数目。
下面有N行,每行是一只白鼠的信息。第一个为正整数,表示白鼠的重量,;
第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。

注意:白鼠的重量各不相同。
输出
按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。
样例输入
3
30 red
50 blue
40 green
样例输出
red
green
blue

 

 

然后下面是我写的关于一个冒泡排序的算法:

#include <stdio.h>

typedef struct{
int w; //重量
char s[10]; //貌似颜色
}l; //定义一个小白鼠的结构体
void main()
{
int n,i,j;
l ll[100],max; //定义一个小白鼠数组,和一个小白鼠变量
scanf("%d",&n);
for (i=0;i<n;i++) //实现输入
{
scanf("%d %s",&ll[i].w,&ll[i].s);
}
//冒牌排序
for (i=0;i<n-1;i++) //如果有 N 个小白鼠的话 那么就进行n-1 次的比较,以排出 N个小白鼠
for (j=0;j<n-i-1;j++) //这里是实现在我们进行 N 个小白鼠排序的时候每个小白鼠的比较次数,我们美排出一个小白鼠,那么接下来的小白鼠比较就只与他下面的比较,因为我们是按从小到大的顺序排序的
{
if (ll[j].w >ll[j+1].w) //实现重量的比较,以实现排序
{
max=ll[j]; //使用一中间变量存储要替换到前面的小白鼠
ll[j]=ll[j+1]; //实现交换,把轻的小白鼠放前面。重的小白鼠放后面
ll[j+1]=max;
}
}
for (i=0;i<n;i++) //输出
{
  printf("%s\n",ll[i].s);
}
}

 

这是我最后通过的解答。

总结:

关于冒泡排序,我们需要掌握的关键点就是在在于我们实现的两个循环,一个是实现我们排序的个数,另外一个是实现我们每次排序的数与它后面的数的比较的次数,再则是从小到大还是从大到小的排序我们就只需要在后面的比较和交换的时候改变大小于符号就ok了。

posted @ 2012-04-28 22:33 →画※哲→ 阅读(138) 评论(0) 编辑

 

谁能帮忙解释下这段代码?帮忙注释下可以...本人不咋看得懂,求高人指点下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 21
void ncf();
void fun();
int z[10][N+1];
void main()
{
	int start=time(NULL);
	int end;
	printf("程序开始运行!\n");
	ncf();
	fun();
	end=time(NULL);
	printf("这个程序共运行了%d秒!\n",end-start);
	getchar();
	getchar();
}
void ncf()
{
	int temp,i,j,m;
	for(i=0;i<10;i++)
	{
		z[i][0]=1;
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<N;j++)
		{
			m=0;
			temp=0;
			for(m=0;m<N;m++)
			{
				temp=temp/10+z[i][m]*i;
				z[i][m]=temp%10;
			}
		}
	}
	for(i=0;i<10;i++)
	{
		for(j=N;j>=0;j--)
			if(z[i][j]!=0)
				break;
		z[i][N]=j+1;
	}
	/*for(i=0;i<10;i++)
	{printf("i=%d\n",i);
	for(j=0;j<N+1;j++)
	printf("%5d",z[i][j]);
	printf("\n");
	}*/
}

void fun()
{
	int a[N]={0},b[N]={0},c[N]={0},d[10]={0},i,j,x,temp,f=0;
	a[N-1]=1;
	while(a[0]!=9)
	{
		//求和!
		for(i=0;i<N;i++)
		{
			temp=0;
			for(x=0;x<N;x++)
			{
				temp=b[x]+z[a[i]][x]+temp;
				b[x]=temp%10;
				temp=temp/10;
				if(temp==0&&x>=z[a[i]][N])
					break;
			}
		}
		//排序!
		for(i=0;i<N;i++)
			d[b[i]]++;
		x=0;
		for(i=0;i<10;i++)
		{
			for(j=0;j<d[i];j++)
			{
				c[x]=i;
				x++;
			}
		}
		//比较!
		f=0;
		for(i=0;i<N;i++)
		{
			if(a[i]!=c[i])
			{
				f=a[i]-c[i];
				break;
			}
		}
		//如果相等输出!
		if(f==0&&b[N-1]>=1&&b[N-1]<=9)
		{
			for(i=N-1;i>=0;i--)
				printf("%d",b[i]);
			printf("\n");
		}
		for(i=N-1;i>0;i--)
		{
			if(a[i]!=9)
				break;
		}
		temp=a[i];
		while(i<N)
		{
			a[i]=temp+1;
			i++;
		}
		for(i=0;i<N;i++)
		{
			b[i]=0;
			c[i]=0;
		}
		for(i=0;i<10;i++)
		{
			d[i]=0;
		}
	}
}

  

posted @ 2012-02-15 22:14 →画※哲→ 阅读(174) 评论(0) 编辑

  由于这段时间流量耗损巨大。无意间有人告诉我说可以用笔记本的无线网卡发射wifi热点给手机用。于是虚心求教,自己实践了下,貌似可以了。在这里和大家分享下。。
  首先就是要准备好有一台带有无线网卡的笔记本电脑,或...台式机买个无线适配器也应该得吧。。由于没有赞助商,所以自己就没有实践过了。有想法的可以自己到时候试试。
  。。。
  准备好之后,就开始吧。。
  1. cmd 打开 dos 窗口
  依次运行dos命令:netsh-->wlan--->set hostednetwork ssid=用户名 key=密码--->start hostednetwork 刚刚的用户名
  如果有什么不懂的可以敲击dos命令 空格加?号。。即可看见提示。。
  2.这样。基本的用无限网卡虚拟wifi网卡就虚拟出来了,接下来就是分享自己的本地连接给它了,打开网络共享中心。打开本地连接的属性
  然后选择共享选项卡,


  这个时候,有的人可能就出问题了,那就是不能共享,有一个什么.......(null).....的问题。
  如果以上设置都正确却出现无法实现共享的情况一般是ICS服务没有打开
  下面右击我的电脑——管理——服务和应用程序——服务——Internet Connection Sharing (ICS)。?
  


  (2)右击选择属性——启动类型选择“自动”(开机自动启动)——单击下方“启动”按钮(验证当前设置能否开启服务)。?
  (3)如果提示无法启动说明与ICS有依存关系的某些服务没有启动,点开属性里“依存关系”标签,依次在服务管理列表里找到这4个服务,与之前一样设置成自动启动类型,并点击“启动”尝试开启服务,如果该服务也无法开启,则继续寻找该服务的“依存关系”服务,直到与ICS存在依存关系的4项服务全部开启,才能开启ICS服务。
  (类似等级金字塔,ICS服务在金字塔最上方,与之依存的服务按等级分布在金字塔每层,只有将下层服务开启后才能开启顶层的ICS服务)。?
  ?。。
  待你全部设置好了之后。。那么就赶快来试试他的极速吧。。(本人在2M的宽带下开启,测试手机下载的时候最高可以达到150 kb/s。。。)
  在这里我还想说一个问题就是。我是使用师大的校园网,有一个问题就是我们需要使用锐捷认证客户端。。这个东西有时候确实很恶心。。可能在你上面的全部都设置好了时候,依然还是有问题,那便是,连上一段时间后,突然跳出一个什么ip冲突的东西来。。
  当然我们不能就此罢休。。只要思想不滑坡,解决的办法总比问题多。
  原因就在于,因为锐捷默认是每隔一分钟扫描一次,看你有没有多网卡,有没有代理什么的,有的话就自动下线了,这就给我们的应用带来很大不便。。
  破解方法就是:
  下载一个反汇编的工具。这里使用UltraEdit
  然后打开 锐捷的 8021x.exe,
  查找60EA00006A06,
  修改为60EAFFFF6A06即可。?
  原理大概就是:
  反汇编8021x.exe,然后查找 60EA0000,
  这是因为1分钟=60000毫秒= 0x0000EA60毫秒(settimer的时间参数为UINT )
  只发现有两处:
  第一处:
  * Reference To: MFC42.Ordinal:06E8, Ord:06E8h
  |
  :0042B253 E868340000 Call 0042E6C0
  :0042B258 8B4E20 mov ecx, dword ptr [esi+20]
  :0042B25B 6A00 push 00000000
  :0042B25D 6860EA0000 push 0000EA60
  :0042B262 6A0A push 0000000A
  :0042B264 51 push ecx
  * Reference To: USER32.SetTimer, Ord:027Ah
  |
  :0042B265 FF1514384300 Call dword ptr [00433814]
  第二处:
  * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  |:004069C0(C)
  |
  :004069E8 6A00 push 00000000
  :004069EA 6860EA0000 push 0000EA60
  :004069EF 6A06 push 00000006
  :004069F1 6A00 push 00000000
  :004069F3 FFD7 call edi
  :004069F5 8BCE mov ecx, esi
  :004069F7 8986D80E0000 mov dword ptr [esi+00000ED8], eax
  :004069FD E83E220000 call 00408C40
  :00406A02 5F pop edi
  * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  |:00406948(C)
  |
  :00406A03 5E pop esi
  :00406A04 C20800 ret 0008?
  第一处的后面有很明显的一个settimer,所以,怀疑在这里。
  把第一处的 push 0000EA60 用 UltraEdit 修改为 push 00003075
  即把一分钟改30秒,在多网卡的情况下运行认证系统,看是否半分钟后出现运行
  环境不正确的提示,发现还是一分钟后提示,修改无效。
  把第一处改还原,修改第二处,看结果,发现半分钟后就出现提示,说明这里就
  是关键。如何修改呢?简单的方法是把时间改的尽可能大,把push 0000EA60
  修改为:
  push FFFFEA60
  然后打开虚拟机的虚拟网卡,哈哈,烦人的掉线现象消失了
  时间FFFFEA60是多少? >45天,45天重启一次,还有什么可担心的呢?
  这时候锐捷认真的校园网亦可畅行无阻了。。后面锐捷的东西由于本人电脑属台式,本人尚未亲自实践。仅仅借用朋友电脑实践了前面部分,所以有想法的自己亲自实践一下吧。
  提醒一句,就是在你反汇编之前最好备份一下那个东西。。
  如有不足或不对之处,还请大家指正。。。。
  最后我这里提供了两个文件,如果大家闲每次开启(注意,这是需要每次上都要自己开启的)麻烦的话可以直接运行本文件就可以开启承接网络了。。。1.bat是设置文件 ssid=gm_wifi key=01234567 2.bat是启动文件。。
  大家有需要的话可以联系:QQ345518067。。。
  如有不足或不对之处,还请大家指正。。。。?

posted @ 2011-12-18 11:49 →画※哲→ 阅读(862) 评论(2) 编辑

假如你还不懂美化下你的ps启动画面,那么你可以来看看哦。。老鸟免进,本问只是刚试过了说出来分享。。

好了,现在开始

首先准备工作:

1.下载资源修改工具:ResBuild

2.安装好ps(废话),打开所在文件夹,找到PSArt.dll,有些是找到PSArt.dllPSViews.dll。(最好复制出来备份好,,不然到时候没得后悔)

。。。。之后便是用工具ResBuild这个打开资源文件,然后点一下里面的version。info...让其生成temp文件、关闭ResBuild软件

。。。。之后打开然后打开刚刚生成的temp文件,找到SPLASHARTALT.PNG,SPLASHARTBACKGROUND.PNG两个图片然后运用ps修改为你想要的图片,但是不要修改大小,,只能在上面修改。保存。关闭ps

。。。。。再次打开ResBuild软件,,然后保存就ok了。。。

之后运行看看咯,,不行那只能说明人品了。。反正我是弄得了,,信不信由你,反正我是信了。。

posted @ 2011-08-14 11:02 →画※哲→ 阅读(127) 评论(0) 编辑

我是一名在校大学生,今年还在读大一,现在我已经确定往嵌入式方向发张了,那我现在应该怎么选择课程呢?还有就是我应该主动学习那些东西,主要是学什么呢?还有就是我应该注重那些课程的学习?或是能否给写好的建议呢?谢谢。。。

希望大家给点建议。。。谢谢!!

posted @ 2011-06-16 23:58 →画※哲→ 阅读(67) 评论(0) 编辑