歆沣
歆沣
关注数: 332
粉丝数: 78
发帖数: 409
关注贴吧数: 78
武大,你该吃药了
宜昌打车这么坑的吗 为啥这里打车去景区,不管是不是单程,都必须付来回的车费?四十公里路硬是要收 200 快
《照妖镜《》
人找车-有麻城回上海的车吗? 人找车-有麻城回上海的车吗?求带走
有人有多的招财运吗
我集齐了,谁要有福同享速速回复
组个队吧
换卡,购卡 谁有多的好或者运求换,买也可以
组队分钱
金猪是怎么一回事呀,有人帮忙解释下吗
坑比圆通,老子再也不用圆通了 今天要寄件,打客服叫上门取件,他们说了下午会来。也收到通知说下单成功,尼玛等了一下午没来。我日,你不来好歹通知一下吧,至少我可以不用等你,可以换一个快递!!!圆通就特么是个坑货!!!!!!!!
043期直选推荐 004、006、007 014、016、017 031、034、036、037 051、054、056、057 061、064、066 204、206、207 211、214、216、217 236、237 251、254 261、264 401、404、406、407 411、414、416、417 431、434 451、457 461、467
【成长记录】 戒色第三天
【成长记录】 戒色第三天
【成长记录】 戒色第二天,再接再厉
昊沧十周年篝火晚会有感 一入西山气象新,餐厅未到笑先闻。 有望引来无望辈,盛情聚起重情人。 歌声袅袅难停笔,篝火轰轰欲举樽。 揽袖相邀谈十载,持杯共酒醉千巡。 2015-10-23
无忧即乐
要改变对剩女的看法 本人现在22岁,男,软件开发专业大专生,现今大三,在公司实习。 经过深思熟虑,权衡各种利弊,最终决定逍遥一世,终身不娶。 我不认为高龄未嫁的女生应该被称为剩女,"剩女"这个词给人的意思,感觉是一心想把自己嫁出去,就是没人要,这实在是一种偏见。在这种偏见的压力下,可能有些女生就凑合着随便找一个人嫁了。 每个人都有自己的活法,就算年纪大一点,也应该努力追求自己想要的,按照自己的意愿去活。 无忧即乐.其一 作者:歆沣 官袍处处生寒气,帅印时时可累人。 寄意山中窥日月,寻幽水上度乾坤。 乘风驾鹤割云破,踏浪凌波斩月分。 若许从今随意梦,只手了却世间尘。 (淡观权势) 无忧即乐-其二 作者:歆沣 暮雨荒郊垂碧柳,春风古道立斜阳。 得失壁上观天静,荣辱池中会草香。 梦冷常餐风雨露,愁深独眺海河江。 樽前莫把功名论,醉饮千杯又何妨? (淡观荣辱得失) 无忧即乐-其三 作者:歆沣 卧雪燃薪尝冷暖,背笛舞带看直曲。 车压稚子身为径,水漫京城路作渠。 把盏离人笺上字,持竿钓客眼中鱼。 由来岁乱伤国步,何意桌前象马车? (淡观人间冷暖) 《无忧即乐.其四》 作者:歆沣 频寻燕子未及春,又见谁家扣冢门? 百日凭鐏花似酒,十年面壁影如人。 霜结始晓天无泪,梦破方知月有痕。 卧侧双形恩爱浅,池旁一木雪花深。 (淡观爱恨) 《无忧即乐-其五》 静倚危楼性自空,情疏笔墨意难穷。 缺伊院落花携雨,失水池塘柳带风。 闲著诗词优雅处,忙敲代码快然中。 天涯过客形相似,世上行人趣不同。
【影子传说分享】我竟然飞了368米,行云流水一般,恐高症慎入! 我在影子传说中体验飞檐走壁368米,来无影去无踪!除了不断的跳跃穿梭在大楼之间,还能吃道具放大招!如此畅快的游戏,少年为何不来一战?http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fopenapi.baidu.com%2Foauth%2F2.0%2Fauthorize%3Fclient_id%3DBlQxYwG67FXHlUsraBaZDeTW%26response_type%3Dcode%26scope%3Dtieba_user_put%26display%3Dmobile%26redirect_uri%3Dhttp%3A%2F%2F210.51.190.246%2Fyzcs%2Fentrance.php%26tbfullscreen%3D1%26tbgametype%3D1&urlrefer=d8003aabf18de78c54bf507cda640723
219 258,458
207期开奖预测 单挑168,分析图如下:
179期开奖预测 100期数据预测: 从出现总次数考虑: 第一位主打:3、4 防:5、6、7、8、9 第二位主打:2、4、7 防:1、3、5、6、8 第三位主打:1、2、3、7 防:0、5、9 从和值考虑: 主打:18 防:16 从跨度大小考虑: 主打:小 防:大 从跨度奇偶考虑: 主打:偶 防:奇 综合考虑跨度主打:4 防:5、6、7 从类型考虑: 主打:组六 防:组三 胆码预测: 主打:4 防:7 最终选号: 447(组选)、477(组选)、847、487
windows程序开发,从这里开始 #include<windows.h>#include //回调函数声明LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){WNDCLASS wndclass;//定义一个窗体类wndclass.style=CS_HREDRAW | CS_VREDRAW;// 窗口类型,水平重画和垂直重画wndclass.lpfnWndProc=WndProc;//定义窗口处理函数wndclass.cbClsExtra=0;//窗口类无扩展wndclass.cbWndExtra=0;//窗口实例无扩展wndclass.hInstance=hInstance;//当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//采用带箭头光标wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));//设置窗体背景为白色wndclass.lpszMenuName=NULL;//设置窗体无菜单wndclass.lpszClassName="傲世孤尘";//设置窗口类名/************************************************************************//* 注册窗口类,如果注册失败,则发出警告,并返回false*//************************************************************************/if(!RegisterClass(&wndclass)){MessageBeep(0);return false;}/*************************************************************************************************************************************************//* 创建窗口(窗口类名、窗口标题名、窗口的风格、窗口左上角坐标值、窗口的高和宽、父窗口、子菜单、创建此窗口的应用程序句柄、最后一个参数不使用(传NULL)*//**************************************************************************************************************************************************/HWND hwnd=CreateWindow(wndclass.lpszClassName,"我的第一个窗口",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);/************************************************************************//* 显示窗口 *//************************************************************************/ShowWindow(hwnd,nCmdShow);/************************************************************************//* 绘制用户区 *//************************************************************************/UpdateWindow(hwnd);/*HKEY hKey; if(ERROR_SUCCESS==RegDeleteKey(HKEY_CURRENT_USER,"Control Panel\\Desktop\\AutoEndTask")) { } RegCloseKey(hKey);*//************************************************************************//* 创建消息循环 *//************************************************************************/MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}//消息循环结束,将消息返回系统return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){switch(uMsg){case WM_CHAR:char szChar[20];sprintf(szChar,"char is %d",wParam);MessageBox(hwnd,szChar,"weixin",0);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"mouse clicked","傲世孤尘",0);HDC hdc;hdc=GetDC(hwnd);TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));ReleaseDC(hwnd,hdc);break;case WM_PAINT:HDC hDC;PAINTSTRUCT ps;hDC=BeginPaint(hwnd,&ps);TextOut(hDC,0,0,"傲世孤尘",strlen("傲世孤尘"));char chHwnd[30];sprintf(chHwnd,"hwnd is: %d",hwnd);printf("%d\n",hwnd);TextOut(hDC,100,0,chHwnd,strlen(chHwnd));EndPaint(hwnd,&ps);break;case WM_CLOSE:if(IDYES==MessageBox(hwnd,"是否真的结束?","傲世孤尘",MB_YESNO)){DestroyWindow(hwnd);}break;case WM_DESTROY:PostQuitMessage(0);break;case WM_QUERYENDSESSION://MessageBox(hwnd,"未经本程序许可,你不能关机!","禁止关机",MB_OK|MB_SYSTEMMODAL); return 0;//此处返回0则不能关机,返回1就能关机。default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;}
新人报道 今天无意中发现了魔方格这个网站,一看到就马上注册了,做了些英语练习,感觉非常好。之前就想找个类似的学习网站,很不容易。感谢这个网站的团队!
新人报道 新人报道
7_17_6.asm assume cs:code,ds:data data segment db 'HeLLo' db 'wOrld' data endscode segment start: mov ax,data mov ds,axmov bx,0 mov cx,5s1: mov al, or al,00100000b mov ,al inc bx loop s1s2: mov al, and al,11011111b mov ,al inc bx loop s2mov ax,4c00h int 21h code endsend start
7_17_4.asm assume cs:code code segment dw 1,2,3,4,5,6,7,8 dw 0,0,0,0,0,0,0,0 start: mov ax,cs mov ss,ax mov sp,20hmov bx,0 mov cx,8 s1:push cs: add bx,2 loop s1mov bx,0 mov cx,8 s2:pop cs: add bx,2 loop s2mov ax,4c00h int 21h code ends end start
7_17_3.asm assume cs:code code segment dw 1h,2h,3h,4h,5h start:mov ax,0h mov bx,0h mov cx,5h s:add ax,cs: add bx,2h loop smov ax,4c00h int 21h code ends end start
7_17_2.asm assume cs:code code segment mov ax,1000h mov ds,ax mov bx,0h mov cx,0010hs1:mov ,bx inc bx loop s1mov cx,0010h mov bx,0hs2:mov ax,1000h mov ds,ax mov dl,mov ax,1001h mov ds,ax mov ,dlinc bx loop s2mov ax,4c00h int 21h code ends end
7_17_1.asm assume cs:code code segment mov ax,0 mov bx,1 mov cx,100 s:add ax,bx inc bx loop smov ax,4c00h int 21h code ends end
7_16_2.asm assume cs:codecode segment mov ax,1000h mov ds,ax mov ax,4h mov bx,5h mov ,ax mov cx,5h s:add ,ax loop s mov ax,4c00h int 21h code endsend
7_16_1.asm assume cs:abc abc segment mov ax,2 add ax,ax add ax,ax mov ax,4c00h int 21h abc ends end
VB中使用WinSock控件编写网络程序 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。 可能的用途 创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。 创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。 创建“聊天”程序。 协议的选择 当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连接状态: TCP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接; UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。 通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议的问题: 当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。 要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这种连接会占用的更多的处理器资源,成本也会更高一些。 数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。 协议的配置 配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样:Winsock1.Protocol=sckTCPProtocol 确定你的计算机名 要连接到远程的计算机,你必须知道它的IP地址或别名。IP地址是一串用句点分隔的3位数字。通常,计算机的别名更容易让人记住。 按下面的步骤可以找到你的计算机名: 在“任务栏”里单击“开始” 在“设置”选项里单击“控制面板”; 双击“网络”图标; 单击“网络标识” 在“计算机名”中显示的就是你的计算机名。 一旦你找到你的计算名,它就可以作为远程主机的属性来用了。
用Winsock控件实现文件的下载(vb) 使用控件有:Winsock控件,CommandButton控件,TextBox控件 编程步骤如下: 1.首先声明变量 DimstrCommandAsString DimstrWebPageAsString 2.把如下代码加到Command1的Command1_Click事件: PrivateSubCommand1_Click() Winsock1.RemoteHost="202.103.176.81"'设置连接的网址 Winsock1.RemotePort=80'设置要连接的远程端口号 Winsock1.Connect'返回与远程计算机的连接。 EndSub 3.把如下代码加到Winsock1的Connect事件: PrivateSubWinsock1_Connect()'当一个Connect操作完成时发生 OnErrorResumeNext strWebPage="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.vbeden.com%2Findex_main.htm&urlrefer=449dcb340d744e06e3eb8ceff9105b0b"'要下载的文件 strCommand="GET" strWebPage "HTTP/1.0" vbCrLf''GET为FTP命令取得文件 strCommand=strCommand "Accept:*/*" vbCrLf'这句可以不要 strCommand=strCommand "Accept:text/html" vbCrLf'这句可以不要 strCommand=strCommand vbCrLf'记住一定要加上vbCrLf 'Debug.PrintstrCommand'注:你可以用Debug.PrintstrCommand来查看一下格式 Winsock1.SendDatastrCommand'给远程计算机发送数据 EndSub 4.把如下代码加到Winsock1的DataAmival事件: PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong)'取得数据时产生该事件 OnErrorResumeNext'在错误处理程序结束后,恢复原有的运行 DimwebDataAsString Winsock1.GetDatawebData,vbString'检取当前的数据块 Text1.Text=Text1.Text webData EndSub->
分数表示成循环小数(java) import java.util.Scanner; import java.util.Vector; class A{ public static void main(String[] args){ Scanner in=new Scanner(System.in); System.out.print("请输入分子:"); int a=in.nextInt(); System.out.print("请输入分母:"); int b=in.nextInt(); System.out.println(method(a,b)); } public static String method(int x,int y){ String str; Vector<Integer> shang=new Vector<Integer>(); Vector<Integer> yushu=new Vector<Integer>(); int shu=x%y*10; shang.add(shu/y); yushu.add(shu%y); do{ shu=yushu.get(yushu.size()-1)*10; shang.add(shu/y); yushu.add(shu%y); }while(shang.indexOf(shang.get(shang.size()-1))==shang.size()-1&&shang.indexOf(shang.get(shang.size()-1))==yushu.indexOf(yushu.get(yushu.size()-1))); int start=shang.indexOf(shang.get(shang.size()-1)); str=x/y+"."; if(start!=0){ for(int i=0;i<start;i++) str+=shang.get(i); } str+="["; for(int i=start;i<shang.size()-1;i++) str+=shang.get(i); str+="]"; return str; } }
八皇后问题-回溯法-递归形式-c #include<iostream> #include<math.h> using namespace std; #define N 8 int p[N];//记录棋盘状态 //考察皇后x放在p[x]处是否不发生冲突 bool f(int x){ for(int i=0;i<x;i++) if(p[i]==p[x]||abs(x-i)==abs(p[x]-p[i])) return 0; return 1; }//放置第x个棋子棋子 void fun(int x){ if(x==N){ for(int i=0;i<N;i++)cout<<"("<<i+1<<","<<p[i]+1<<")"<<" "; cout<<endl; }else{ for(int i=0;i<N;i++){ p[x]=i; if(f(x))fun(x+1); } } } int main(){ fun(0); } 傲世孤尘 2013-05-25
策略模式(c语言) 先新建一个记事本,重命名为“Strategy.h” 然后将以下代码粘贴在记事本里面并保存 int add(int,int); //设置默认策略 int (*p)(int,int)=add; //策略环境 static void environment(int (*x)(int,int)){ p=x; } //抽象策略 int strategy(int x,int y){ return (*p)(x,y); } //加法策略 int add(int x,int y){ return x+y; } //减法策略 int sub(int x,int y){ return x-y; } //乘法策略 int multiply(int x,int y){ return x*y; } //除法策略 int divide(int x,int y){ return x/y; } --------------------------------------------以下为策略模式测试代码: #include"strategy.h" #include<stdio.h> //自定义策略 int mystrategy(int x,int y){ return 2*x-y; } void main(){ //使用默认策略计算 printf("%d\n",strategy(6,4)); //将减法策略放到策略环境中 environment(sub); printf("%d\n",strategy(6,4)); //将乘法法策略放到策略环境中 environment(multiply); printf("%d\n",strategy(6,4)); //将除法策略放到策略环境中 environment(divide); printf("%d\n",strategy(6,4)); //将自定义策略放到策略环境中 environment(mystrategy); printf("%d\n",strategy(6,4)); }
JTextField只能输入数字(整数) import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; //只能输入整数 public class Txtonlynumber { public Txtonlynumber(){ JFrame f=new JFrame("Txtonlynumber"); Container contentPane=f.getContentPane(); JTextField salary=new JTextField(10); salary.setDocument(new NumOnlyDocument()); contentPane.add(salary); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new Txtonlynumber(); } class NumOnlyDocument extends PlainDocument{ public void insertString(int offset, String s, AttributeSet attrSet)throws BadLocationException { try {Integer.parseInt(s); }catch(NumberFormatException ex){ return; } super.insertString(offset,s,attrSet); } } }
System.out.println()的重定向 package IO;import java.io.FileNotFoundException; import java.io.PrintStream;public class Test5 { public static void main(String[] args) throws FileNotFoundException { PrintStream ps=new PrintStream("xinfeng.txt"); System.setOut(ps); System.out.println("流水落花春去也,天上人间."); } } 傲世孤尘
TCP双人聊天的实现 /////////////////////服务端 package TCP;import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket;import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.text.BadLocationException;public class Server1 extends JFrame implements Runnable{ private JTextArea jta=new JTextArea(); private JScrollPane jsp=new JScrollPane(jta); private JTextField jtf=new JTextField(); private Thread t; private boolean tb=true; private ServerSocket server; private Socket socket; private BufferedReader br; private BufferedWriter bw; public static void main(String[] args) { new Server1().setVisible(true); } public Server1(){ super("Server1"); this.setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jsp,BorderLayout.CENTER); this.add(jtf,BorderLayout.SOUTH); jta.setFocusable(false); t=new Thread(this); t.start(); jtf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER){ jta.append("我说:"+jtf.getText()+"\n"); try { bw.write(jtf.getText()+"\n"); bw.flush(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jtf.setText(""); } } }); } public void run() { try { server=new ServerSocket(6666); socket=server.accept(); br=new BufferedReader(new InputStreamReader(socket.getInputStream())); bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); jta.append("连接成功\n"); while(tb){ jta.append("对方说:"+br.readLine()+"\n"); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } /////////////////////////////客户端 package TCP;import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket;import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;public class Client1 extends JFrame implements Runnable{ private JTextArea jta=new JTextArea(); private JScrollPane jsp=new JScrollPane(jta); private JTextField jtf=new JTextField(); private Thread t; private boolean tb=true; private Socket socket; private BufferedReader br; private BufferedWriter bw; public static void main(String[] args) { new Client1().setVisible(true); } public Client1(){ super("Client1"); this.setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jsp,BorderLayout.CENTER); this.add(jtf,BorderLayout.SOUTH); jta.setFocusable(false); t=new Thread(this); t.start(); jtf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER){ jta.append("我说:"+jtf.getText()+"\n"); try { bw.write(jtf.getText()+"\n"); bw.flush(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jtf.setText(""); } } }); } public void run() { try { socket=new Socket("127.0.0.1",6666); br=new BufferedReader(new InputStreamReader(socket.getInputStream())); bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); while(tb){ jta.append("对方说:"+br.readLine()+"\n"); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } 傲世孤尘
UDP聊天的实现 /////////////////////////服务端,非严格意义上的服务端 package UDP;import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;public class Server1 extends JFrame implements Runnable{ private JTextArea jta=new JTextArea(); private JScrollPane jsp=new JScrollPane(jta); private JTextField jtf=new JTextField(); private Thread t; private boolean tb=true; private DatagramSocket ds; private DatagramPacket indp; private DatagramPacket outdp; public static void main(String[] args) { new Server1().setVisible(true); } public Server1(){ super("Server1"); this.setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jsp,BorderLayout.CENTER); this.add(jtf,BorderLayout.SOUTH); jta.setFocusable(false); t=new Thread(this); t.start(); jtf.addKeyListener(new KeyAdapter() { public void keyReleased (KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER){ try { byte[] buf=jtf.getText().getBytes(); outdp=new DatagramPacket(buf,buf.length, new InetSocketAddress("127.0.0.1", 8888)); ds.send(outdp); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jta.append("我说:"+jtf.getText()+"\n"); jtf.setText(""); } } }); } public void run() { try { ds=new DatagramSocket(7777); byte[] buf=new byte[1024]; indp=new DatagramPacket(buf, buf.length); while(tb){ ds.receive(indp); jta.append("对方说:"+new String(buf,0,indp.getLength())+"\n"); } } catch (Exception e) { e.printStackTrace(); } } } //////////////////////////////////客户端 package UDP;import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;public class Client1 extends JFrame implements Runnable{ private JTextArea jta=new JTextArea(); private JScrollPane jsp=new JScrollPane(jta); private JTextField jtf=new JTextField(); private Thread t; private boolean tb=true; private DatagramSocket ds; private DatagramPacket indp; private DatagramPacket outdp; public static void main(String[] args) { new Client1().setVisible(true); } public Client1(){ super("Client1"); this.setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jsp,BorderLayout.CENTER); this.add(jtf,BorderLayout.SOUTH); jta.setFocusable(false); t=new Thread(this); t.start(); jtf.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER){ try { byte[] buf=jtf.getText().getBytes(); outdp=new DatagramPacket(buf,buf.length, new InetSocketAddress("127.0.0.1", 7777)); ds.send(outdp); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jta.append("我说:"+jtf.getText()+"\n"); jtf.setText(""); } } }); } public void run() { try { ds=new DatagramSocket(8888); byte[] buf=new byte[1024]; indp=new DatagramPacket(buf, buf.length); while(tb){ ds.receive(indp); jta.append("对方说:"+new String(buf,0,indp.getLength())+"\n"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 傲世孤尘
回溯法解01背包(java) package 算法练习;import java.util.Scanner;public class Test { static int v;//背包容量 static int num;//物品数量 static int[] w;//物品的重量 static int[] p;//物品的价值 static int[] x;//试探集合 static int[] mx;//最优集合 static int mp;//最大价值 public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("请输入背包的容量:"); v=in.nextInt(); System.out.println("请输入物品的数量:"); num=in.nextInt(); w=new int[num]; p=new int[num]; x=new int[num]; mx=new int[num]; System.out.println("请分别输入物品的重量和价值:"); for(int i=0;i<num;i++){ w[i]=in.nextInt(); p[i]=in.nextInt(); } fun(0,0,0); System.out.println("最大价值为:"+mp); System.out.println("达到最大价值的组合为:"); for(int i=0;i<num;i++)System.out.print(mx[i]); } public static void fun(int n,int vw,int vp){ if(n==num){ if(vp>mp){ mp=vp; for(int i=0;i<num;i++)mx[i]=x[i]; } }else{ for(int i=0;i<=1;i++){ x[n]=i; if(vw+x[n]*w[n]<=v){ vw+=x[n]*w[n]; vp+=x[n]*p[n]; fun(n+1,vw,vp); vw+=x[n]*w[n]; vp+=x[n]*p[n]; } } } } } 傲世孤尘 2013-05-16
斐波那契矩阵解法(java) package 算法练习;import java.util.Scanner;public class 斐波那契矩阵解法 { public static void main(String[] args) { Juzhen1 j1=new Juzhen1(new long[][]{{1,1},{1,0}}); Juzhen2 j2=new Juzhen2(new long[]{1,1}); Scanner in=new Scanner(System.in); int t=in.nextInt(); long start=System.currentTimeMillis(); System.out.println(j1.pow(t-2).multipy(j2).arr[0]); long end=System.currentTimeMillis(); System.out.println(end-start); } } class Juzhen1{ long[][] arr=new long[2][2]; public Juzhen1(long[][] arr) { this.arr = arr; } public Juzhen1 multipy(Juzhen1 j){ long[][] a=j.arr; long[][] b=new long[2][2]; b[0][0]=arr[0][0]*a[0][0]+arr[0][1]*a[1][0]; b[0][1]=arr[0][0]*a[0][1]+arr[0][1]*a[1][1]; b[1][0]=arr[1][0]*a[0][0]+arr[1][1]*a[1][0]; b[1][1]=arr[1][0]*a[0][1]+arr[1][1]*a[1][1]; return new Juzhen1(b); } public Juzhen2 multipy(Juzhen2 j){ long[] a=j.arr; long[] b=new long[2]; b[0]=arr[0][0]*a[0]+arr[0][1]*a[1]; b[1]=arr[1][0]*a[0]+arr[1][1]*a[1]; return new Juzhen2(b); } public Juzhen1 pow(int x){ Juzhen1 j=this; for(int i=1;i<x;i++) j=j.multipy(this); return j; } public String toString() { return arr[0][0]+"\t"+arr[0][1]+"\n"+arr[1][0]+"\t"+arr[1][1]; } } class Juzhen2{ long[] arr=new long[2]; public Juzhen2(long[] arr) { this.arr = arr; } public String toString() { return arr[0]+"\n"+arr[1]; } }
回溯法解八皇后问题(java) package 算法练习;public class 八皇后问题_回溯法_递归形式 { static int n=8; public static void main(String[] args) { int[] arr=new int[n]; fun(arr,0); } public static void fun(int[] arr,int m){ if(m==n){ for(int i=0;i<n;i++)System.out.print(arr[i]+" "); System.out.println(); }else{ for(int i=1;i<=n;i++){ arr[m]=i; if(f(arr,m)){ fun(arr,m+1); } } } } //考察皇后x放在arr[x]位置上是否不发生冲突 public static boolean f(int[] arr,int x){ for(int i=0;i<x;i++) if(arr[i]==arr[x]||(x-i)==Math.abs(arr[x]-arr[i])) return false; return true; } }
回溯法求解-最小覆盖问题(最少的点控制所有的边,java) import java.awt.Point; import java.util.ArrayList; import java.util.List; import java.util.Scanner;/** * 先根据用户输入的邻接矩阵,求出对应的关联矩阵,然后应用回溯法解题 * @author Administrator * */ public class Test1_回溯法 { static int num;//点的个数 static int[][] array1;//邻接矩阵 static List<Point> line=new ArrayList<Point>();//存放每一条边,其中x和y分别代表一个顶点 static int[][] array2;//关联矩阵 static int min=Integer.MAX_VALUE;//最优解 static int[] x;//试探集合 static int[] mx;//最优集合 public static void main(String[] args) { //初始化数据 input(); //回溯法 method(0,0,new int[line.size()]); for(int i=0;i<num;i++){ for(int j=0;j<array2[0].length;j++){ System.out.print(array2[i][j]+" "); } System.out.println(); } //输出结果 System.out.println(min); for(int i=0;i<num;i++){ System.out.print(mx[i]+" "); } } /** * 回溯法 * @param nd当前处理的顶点 * @param vd当前已经选择的顶点数目 * @param pd保存当前已经控制了的边的情况 */ public static void method(int nd,int vd,int[] pd){ if(nd==num){ //如果至少有一条边没有被控制,则回到上一层 for(int i=0;i<pd.length;i++){ if(pd[i]!=1){ return; } } //更新最优解 if(vd<min){ min=vd; for(int i=0;i<mx.length;i++){ mx[i]=x[i]; } } }else{ x[nd]=0; method(nd+1,vd,pd); x[nd]=1; int[] temp=new int[line.size()]; for(int i=0;i<temp.length;i++){ if(pd[i]==1||array2[nd][i]==1){ temp[i]=1; } } method(nd+1,vd+1,temp); } } //数据初始化 public static void input(){ //接受用户输入,数组输入,感觉用nextLine()再分割有点麻烦,而且输入只涉及整数,应该不会有问题 Scanner in=new Scanner(System.in); num=in.nextInt(); x=new int[num]; mx=new int[num]; array1=new int[num][num]; for(int i=0;i<num;i++){ for(int j=0;j<num;j++){ array1[i][j]=in.nextInt(); if(j<i&&array1[i][j]==1){ line.add(new Point(i,j)); } } } //根据输入的邻接矩阵,求出其对应的关联矩阵 array2=new int[num][line.size()]; for(int i=0;i<line.size();i++){ Point p=line.get(i); array2[p.x][i]=1; array2[p.y][i]=1; } } } 测试数据: 输入: 5 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 输出: 3 0 1 0 1 1
java调用本地c++程序实现HelloWord(JNI) 第一步,先写一个java类如下: public class HelloWord{ public native void print(); public static void main(String[] args){ System.loadLibrary("HelloWord"); HelloWord hw=new HelloWord(); hw.print(); } } 第二步,编译上面的源文件,生成class文件,然后用javah命令生成一个c++头文件"HelloWord.h" 第三步,打开c/c++集成开发工具,新建一个dll工程,然后将三个文件拷贝至工程目录下: 1、第二步生成的头文件 2、java安装目录下的include文件夹中的jni.h 3、jni.h文件同一目录下有一个win32文件夹,打开后,有一个jni_md.h文件 第四步,在刚刚新建的工程里面再新建一个c++源文件, 写下如下代码: #include<iostream> #include"HelloWord.h" using namespace std; JNIEXPORT void JNICALL Java_HelloWord_print(JNIEnv *, jobject){ cout<<"Hello Word !"<<endl; cout<<"2013-07-05 JNI 传智播客第一集"<<endl; } 然后编译、连接,会生成一个dll文件,文件名与工程名相同 第五步,将上一步生成的dll文件拷贝至HelloWord.java同一目录下,然后编译运行 到这里就OK了 傲世孤尘 2013-07-05
运算符重载-c++ #include<iostream> #include<math.h> using namespace std; //复数类 class Complex{ private: double shi; double xu; public: Complex(double shi=0,double xu=0){ this->shi=shi; this->xu=xu; } void display();//输出复数 double getMod();//获取复数的模 operator int();//隐式转换 Complex operator +(Complex);//复数相加 Complex operator -(Complex);//复数相减 Complex operator *(Complex);//复数相乘 Complex operator /(Complex);//复数相除 void operator +=(Complex);//复数简加运算 void operator -=(Complex);//复数简减运算 void operator *=(Complex);//复数简乘运算 void operator /=(Complex);//复数简除运算 friend Complex operator +(double,Complex);// 实数加复数 friend Complex operator -(double,Complex);// 实数减复数 friend Complex operator *(double,Complex);// 实数乘复数 friend Complex operator /(double,Complex);// 实数除复数 friend ostream &operator <<(ostream&,Complex&);//流插入运算 friend istream &operator >>(istream&,Complex&);//流提取运算 //复数间比较大小,依据馍的大小 bool operator <(Complex); bool operator ==(Complex); bool operator >(Complex); bool operator !=(Complex); //比较两个复数的大小,大于返回正数,等于返回0,小于返回负数 double compareTo(Complex); //比较两个复数是否相等 bool equals(Complex); }; //输出复数 void Complex::display(){ if(shi){ cout<<shi; if(xu>0){ if(xu!=1)cout<<"+"<<xu<<"i"<<endl; else cout<<"+"<<"i"<<endl; } if(xu<0){ if(xu!=-1)cout<<xu<<"i"<<endl; else cout<<"-i"<<endl; } if(xu==0)cout<<endl; }else{ if(xu==0)cout<<shi<<endl; else if(xu!=1) cout<<xu<<"i"<<endl; else cout<<"i"<<endl; } } //隐式转换 Complex::operator int(){ return shi; } //获取复数的模 double Complex::getMod(){ return sqrt(shi*shi+xu*xu); } //复数相加 Complex Complex::operator+(Complex c){ return Complex(this->shi+c.shi,this->xu+c.xu); } //复数相减 Complex Complex::operator-(Complex c){ return Complex(this->shi-c.shi,this->xu-c.xu);; } //复数相乘 Complex Complex::operator*(Complex c){ return Complex(this->shi*c.shi-this->xu*c.xu,this->shi*c.xu+this->xu*c.shi); } //复数相除 Complex Complex::operator/(Complex c){ double fenmu=c.shi*c.shi+c.xu*c.xu; Complex c1((this->shi*c.shi+this->xu*c.xu)/fenmu,(this->xu*c.shi-this->shi*c.xu)/fenmu); return c1; }//复数简加 void Complex::operator+=(Complex c){ *this=*this+c; } //复数简减 void Complex::operator-=(Complex c){ *this=*this-c; } //复数简乘 void Complex::operator*=(Complex c){ *this=*this*c; } //复数简除 void Complex::operator/=(Complex c){ *this=*this/c; } //实数加复数 Complex operator +(double x,Complex c){ return Complex(x,0)+c; } //实数减复数 Complex operator -(double x,Complex c){ return Complex(x,0)-c; } //实数乘复数 Complex operator *(double x,Complex c){ return Complex(x,0)*c; } //实数除复数 Complex operator /(double x,Complex c){ return Complex(x,0)/c; }//流插入运算 ostream & operator <<(ostream &output,Complex &c){ if(c.shi){ output<<c.shi; if(c.xu>0){ if(c.xu!=1)output<<"+"<<c.xu<<"i"; else output<<"+"<<"i"; } if(c.xu<0){ if(c.xu!=-1)output<<c.xu<<"i"; else output<<"-i"; } if(c.xu==0)output<<endl; }else{ if(c.xu==0)output<<c.shi; else if(c.xu!=1) output<<c.xu<<"i"; else output<<"i"; } return output; } //流提取运算 istream & operator >>(istream &input,Complex &c){ input>>c.shi>>c.xu; return input; } //复数间比较大小,依据模 bool Complex::operator<(Complex c){ return getMod()<c.getMod(); } bool Complex::operator==(Complex c){ return getMod()==c.getMod(); } bool Complex::operator>(Complex c){ return getMod()>c.getMod(); } //比较两个复数是否不相等 bool Complex::operator!=(Complex c){ return getMod()!=c.getMod(); } //比较两个复数间的大小 double Complex::compareTo(Complex c){ return getMod()-c.getMod(); } //比较两个复数是否相等 bool Complex::equals(Complex c){ return *this==c; } int main(){ /* //输出复数 Complex c1(2,6),c2(12,-8),c3; cout<<"输出复数测试"<<endl; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<endl; //测试复数间的运算 cout<<"测试复数间的运算" <<endl; cout<<"c1+c2="; c3=c1+c2; c3.display(); cout<<"c1-c2="; c3=c1-c2; c3.display(); cout<<"c1*c2="; c3=c1*c2; c3.display(); cout<<"c1/c2="; c3=c1/c2; c3.display(); cout<<endl; //测试实数与复数间的运算 cout<<"测试实数与复数间的运算"<<endl; cout<<"2+c1="; c3=2+c1; c3.display(); cout<<"c2+4="; c3=c2+4; c3.display(); cout<<"15-c1="; c3=15-c1; c3.display(); cout<<"c2-4="; c3=c2-4; c3.display(); cout<<"2*c1="; c3=2*c1; c3.display(); cout<<"c2*3="; c3=c2*3; c3.display(); cout<<"8/c1="; c3=8/c1; c3.display(); cout<<"c2/5="; c3=c2/5; c3.display(); cout<<endl; //测试复数的流运算 cout<<"测试复数的流运算"<<endl; cin>>c3; cout<<c3<<endl; c3=c1+1.5; cout<<c3<<endl; //测试复数的模运算 Complex c4(3,4); cout<<c4<<":"<<c4.getMod()<<endl; Complex c5(3,4),c6(2,9); cout<<c5<<":"<<c5.getMod()<<endl; cout<<c6<<":"<<c6.getMod()<<endl; cout<<endl; cout<<"测试小于号:"<<endl; cout<<"c5<c6:"<<(c5<c6)<<endl; cout<<"c6<c5:"<<(c6<c5)<<endl; cout<<endl; cout<<"测试等于号:"<<endl; cout<<"c5==c6:"<<(c5==c6)<<endl; cout<<"c6==c5:"<<(c6==c5)<<endl; cout<<endl; cout<<"测试大于号:"<<endl; cout<<"c5>c6:"<<(c5>c6)<<endl; cout<<"c6>c5:"<<(c6>c5)<<endl; cout<<endl; //测试compareTo方法 cout<<"测试compareTo方法:"<<endl; Complex c7(5,8),c8(4,9); cout<<c7<<":"<<c7.getMod()<<endl; cout<<c8<<":"<<c8.getMod()<<endl; cout<<"c7.compareTo(c8):"<<c7.compareTo(c8)<<endl; cout<<"c8.compareTo(c7):"<<c8.compareTo(c7)<<endl; cout<<endl; //测试equals方法 Complex c9(2,3),c10(3,4),c11(3,4); cout<<"测试equals方法"<<endl; cout<<c9<<":"<<c9.getMod()<<endl; cout<<c10<<":"<<c10.getMod()<<endl; cout<<c11<<":"<<c11.getMod()<<endl; cout<<"c9.equals(c10):"<<c9.equals(c10)<<endl; cout<<"c10.equals(c11):"<<c10.equals(c11)<<endl; cout<<endl; //测试简加运算符 Complex c12(1,2); cout<<"测试简加运算符"<<endl; cout<<c12<<endl; c12+=Complex(2,3); cout<<c12<<endl; c12+=3; cout<<c12<<endl; cout<<endl; //测试复数简减运算符 Complex c13(10,12); cout<<"测试简减运算符"<<endl; cout<<c13<<endl; c13-=Complex(2,4); cout<<c13<<endl; c13-=6; cout<<c13<<endl; cout<<endl; //测试复数的简乘运算符 Complex c14(1,2); cout<<"测试简乘运算符"<<endl; cout<<c14<<endl; c14*=Complex(1,-1); cout<<c14<<endl; c14*=2; cout<<c14<<endl; cout<<endl; //测试复数的简除运算符 Complex c15(6,8); cout<<"测试复数的简除运算符"<<endl; cout<<c15<<endl; c15/=2; cout<<c15<<endl; c15/=Complex(2,3); cout<<c15<<endl; cout<<endl; //测试隐式转换 int a=(int)Complex(1,2); cout<<"测试隐式转换"<<endl; cout<<a<<endl; cout<<endl; //测试不等于 Complex c16(2,3),c17(4,7); cout<<c16<<endl; cout<<c17<<endl; cout<<(c16!=c17)<<endl; cout<<endl; */ } 傲世孤尘 最后于2013-05-29 更新
后序遍历FBI树-递归形式 //后序遍历FBI树,递归形式 #include<iostream> #include<string> using namespace std; string str;//01串 string ss="";//后序遍历结果 void fun(int s,int e){ if(e==s+1){ if(str[s]=='0')ss+='B'; if(str[s]=='1')ss+='I'; return; } fun(s,(e+1+s)/2); fun((e+1+s)/2,e); bool b=0,i=0; for(int j=s;j<e;j++){ if(str[j]=='0')b=1; if(str[j]=='1')i=1; } if(b){ if(i){ ss+='F'; }else{ ss+='B'; } }else{ if(i){ ss+='I'; } } }int main(){ cin>>str; fun(0,str.length()); cout<<ss<<endl; } 傲世孤尘 2013-05-31
dfs-图的深度优先遍历 /* dfs深度优先遍历 */ #include<iostream> using namespace std; #define N 50 #define max 999999 int map[N][N];//图的矩阵形式 bool state[N][N]={0};//搜索状态 int sx,sy,ex,ey;//搜索的起止坐标 int minStep=max;//最少步数 int h;//图的高度 int w;//图的宽度 //接受用户输入 void input(){ cin>>h>>w; for(int i=0;i<h;i++) for(int j=0;j<w;j++) cin>>map[i][j]; cin>>sx>>sy; cin>>ex>>ey; sx--;sy--; ex--;ey--; }//深度优先搜索 void dfs(int x,int y,int step){ if(x<0||y<0||x>=h||y>=w||map[x][y]==1||state[x][y]==1)return; if(x==ex&&y==ey){ if(step<minStep)minStep=step; return; } state[x][y]=1; dfs(x-1,y,step+1); dfs(x+1,y,step+1); dfs(x,y-1,step+1); dfs(x,y+1,step+1); state[x][y]=0; }int main(){ input(); dfs(sx,sy,0); cout<<minStep<<endl; } 傲世孤尘 2013-05-31
汉诺塔问题非递归算法-C /* 网上看到别人发的关于汉诺塔问题非递归算法,每次都看得有点晕,今天又看了一次,终于明白了其实现原理 传统的递归方法效率极其低下,时间和空间复杂度均呈几何级数增长,当问题规模达到20时,计算时间很漫长,更不用谈30以后的了, 所以,寻找一种非递归方法就很有必要了。 下面是笔者刚刚完成的c++算法 */ #include<iostream> #include<math.h> using namespace std; char pan[3]={'A','B','C'};//三根柱子 int zhuzi[3];//三根柱子的状态 int num;//盘子数 int bu;//总步数 //接受用户输入,并初始化数据 void input(){ cout<<"请输入盘子的个数:"; cin>>num; bu=zhuzi[0]=(int)pow(2,num)-1; if(num%2==1){ pan[1]='C'; pan[2]='B'; } }//输出结果 void output(char x,char y){ cout<<x<<"--->"<<y<<" "; }//移动盘子 void move(bool x){ //x=1则将第一个盘子移动到下一根柱子上,否则把另外两根柱子上可以移动的圆盘移动到新的柱子上。 //先计算出第一个盘子的位置 int one; int m,n,t,a,b; for(int i=0;i<3;i++){ if(zhuzi[i]%2==1){ one=i; break; } } if(x){ if(one!=2){ zhuzi[one+1]+=1; output(pan[one],pan[one+1]); }else{ zhuzi[0]+=1; output(pan[one],pan[0]); } zhuzi[one]-=1; }else{ switch(one){ case 0: a=zhuzi[1]; b=zhuzi[2]; t=0; while(1){ a/=2; b/=2; t++; if(a%2==1){ m=1; break; } if(b%2==1){ m=2; break; } } n=(int)pow(2,t); zhuzi[m]-=n; zhuzi[3-m]+=n; output(pan[m],pan[3-m]); break; case 1: a=zhuzi[0]; b=zhuzi[2]; t=0; while(1){ a/=2; b/=2; t++; if(a%2==1){ m=0; break; } if(b%2==1){ m=2; break; } } n=(int)pow(2,t); zhuzi[m]-=n; zhuzi[2-m]+=n; output(pan[m],pan[2-m]); break; case 2: a=zhuzi[0]; b=zhuzi[1]; t=0; while(1){ a/=2; b/=2; t++; if(a%2==1){ m=0; break; } if(b%2==1){ m=1; break; } } n=(int)pow(2,t); zhuzi[m]-=n; zhuzi[1-m]+=n; output(pan[m],pan[1-m]); break; } } }void fun(){ int t=0; while(1){ if(t<bu){ move(1); t++; }else{ break; } if(t<bu){ move(0); t++; }else{ break; } } cout<<endl; } int main(){ input(); fun(); }/* 理论上这种算法的时间效率相对于传统算法会大幅度提升,然而运行上面的程序,会发现并非如此,? 为什么呢?本程序中有大量的算术运算,这个是制约本程序时间效率的主要因素 ,如何减少运算时间,是接下来需要解决的问题。 解决了这个问题,才真正可以说它的时间效率比传统算法高很多 */ 傲世孤尘 2013-05-25
八皇后问题-回溯法-递归形式-c //研究算法多日,才发现古老的八皇后问题其实非常简单 #include<iostream> #include<math.h> using namespace std; #define N 8 int p[N];//记录棋盘状态 //考察皇后x放在p[x]处是否不发生冲突 bool f(int x){ for(int i=0;i<x;i++) if(p[i]==p[x]||abs(x-i)==abs(p[x]-p[i])) return 0; return 1; }//放置第x个棋子棋子 void fun(int x){ if(x==N){ for(int i=0;i<N;i++)cout<<"("<<i+1<<","<<p[i]+1<<")"<<" "; cout<<endl; }else{ for(int i=0;i<N;i++){ p[x]=i; if(f(x))fun(x+1); } } } int main(){ fun(0); } 傲世孤尘 2013-05-25
01背包问题--回溯法(递归形式)--动态规划-c语言 //回溯法-递归形式-01背包-c++语言 #include<iostream> using namespace std;#define MAX_SIZE 100int mv;//背包最大容量 int mp=-1; //背包最大价值 int mx[MAX_SIZE];//背包取得最大价值的物品集合 int x[MAX_SIZE];//试探集合 int size;//物品数量 int w[MAX_SIZE];//物品重量 int p[MAX_SIZE];//物品价值 void input(){ cout<<"请输入背包的容量:"; cin>>mv; cout<<"请输入物品的数量:"; cin>>size; cout<<"请分别输入各物品的重量和价值:"<<endl; for(int i=0;i<size;i++) cin>>w[i]>>p[i]; }void output(){ if(mp==-1)cout<<"无解!"<<endl; else{ cout<<"背包的最大价值为:"<<mp<<endl; cout<<"达到最大价值时背包的物品集合为:"<<endl; for(int i=0;i<size;i++) cout<<mx[i]<<" "; cout<<endl; } }//nd:当前处理的物品,pd:当前已获得的价值,vd:当前的已使用的容量 void advance(int nd,int pd,int vd){ if(nd==size){ if(pd>mp){ mp=pd; for(int i=0;i<size;i++)mx[i]=x[i]; } }else{ for(int i=0;i<=1;i++){ x[nd]=i; if(vd+x[nd]*w[nd]<=mv){ advance(nd+1,pd+x[nd]*p[nd],vd+x[nd]*w[nd]); } } } }int main(){ input(); advance(0,0,0); output(); }/* 这个问题的解空间是一棵完全二叉树,算法的时间复杂度为:O(2^n) */ /* 近期看到动态规划,终于稍有眉目,现就01背包问题进行分析,并贴出c语言源码 。设第n件物品的重量为:w(n),价值为:p(n). 用d(n,v)来表示前n件物品放入容量为v的背包中所能获得的最大价值, 显然,如果我们知道前n-1件物品放入容量为v-c(n)的背包中所能获得的最大价值, 那么:d(n,v)=max{d(n-1,v),p(n)+d(n-1,v-c(n))} 第n件物品放还是不放,取决于它的前一个字问题的解,这是一个多阶段决策过程, 各个子问题都是相对于当前状态的最优解,整个问题的最优解是由各个子问题的最优解 构成,所以01背包问题满足最优性原理,满足最优性原理的问题可以用动态规划来完成, 将各个子问题的最优解填到一张表中,避免了大量重复的计算,最终问题只需通过查表 进行少量的运算即可得到解决,其时间效率大幅度提升,虽然其时间效率是以牺牲空间效率 为代价,但对于大部分问题而言,我们关注的更多的是时间效率。 */ #include<iostream> using namespace std;#define MAX_SIZE 500int mv;//背包最大容量 int mp=-1; //背包最大价值 int mx[MAX_SIZE];//背包取得最大价值的物品集合 int size;//物品数量 int w[MAX_SIZE];//物品重量 int p[MAX_SIZE];//物品价值 int k[MAX_SIZE][MAX_SIZE];//前i件物品放入容量为j的背包所能取得的最大价值void input(){ cout<<"请输入背包的容量:"; cin>>mv; cout<<"请输入物品的数量:"; cin>>size; cout<<"请分别输入各物品的重量和价值:"<<endl; for(int i=0;i<size;i++) cin>>w[i]>>p[i]; }void output(){ if(mp==-1)cout<<"无解!"<<endl; else{ cout<<"背包的最大价值为:"<<mp<<endl; cout<<"达到最大价值时背包的物品集合为:"<<endl; for(int i=0;i<size;i++) cout<<mx[i]<<" "; cout<<endl; } }int max(int x,int y){ return (x>y)?x:y; }//填表 void fun(){ for(int i=1;i<=size;i++){ for(int j=1;j<=mv;j++){ if(j<w[i-1]){ k[i][j]=k[i-1][j]; }else{ k[i][j]=max(k[i-1][j],p[i-1]+k[i-1][j-w[i-1]]); } } } mp=k[size][mv]; int t=mv; for(int i=size;i>0;i--){ if(k[i][t]>k[i-1][t]){ mx[i-1]=1; t-=w[i-1]; } } }int main(){ input(); fun(); output(); } 傲世孤尘 2013-05-24
谈谈混编 到目前为止,学过的编程语言有vb、c、c++、java,发现每种语言既有自己的长处也有自己的弱点,所以开始致力于混编(混合编程),前段时间研究了下JNI,大家对混编有什么看法呢
c语言练习之路(矩阵转置)
c语言练习之路(矩阵相乘) #include<stdio.h> int main() { int a[2][3],b[3][2],c[2][2],d[3][3],i,j,t; for(t=1;;t++) { printf("\nA是一个2*3的矩阵,B是一个3*2的矩阵。\n"); printf("请输入A矩阵:\n"); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { scanf("%d",&a[i][j]); } } printf("\n请输入B矩阵:\n"); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) { scanf("%d",&b[i][j]); } } printf("\n矩阵A为:\n"); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { printf("%5d",a[i][j]); } printf("\n"); } printf("\n矩阵B为:\n"); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) { printf("%5d",b[i][j]); } printf("\n"); } printf("\n"); for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j]; } } printf("\n"); for(i=0;i<=2;i++) { for(j=0;j<=2;j++) { d[i][j]=b[i][0]*a[0][j]+b[i][1]*a[1][j]; } } printf("矩阵A左乘矩阵B得:\n"); for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { printf("%5d",c[i][j]); } printf("\n"); } printf("矩阵A右乘矩阵B得:\n"); for(i=0;i<=2;i++) { for(j=0;j<=2;j++) { printf("%5d",d[i][j]); } printf("\n"); } printf("\n"); } return 0; } (c语言交流群:251975693,欢迎所有学习c语言的同道们的加入,有了你们,我们更加精彩!)
c语言练习之路(二阶方阵的n次方) #include<stdio.h> int main() { double a[2][2],b[2][2],c[2][2]; int n,i,j,t; for(;;) { printf("矩阵A为一个二阶方阵,请输入A:\n"); for(i=0;i<=1;i++) for(j=0;j<=1;j++) scanf("%lf",&a[i][j]); printf("矩阵B为矩阵A的n次方(n为非负数),请输入n:"); scanf("%d",&n); printf("矩阵A为:\n"); for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { printf("%15.0lf",a[i][j]); } printf("\n\n\n"); } for(i=0;i<=1;i++) for(j=0;j<=1;j++) c[i][j]=a[i][j]; if(n==0) for(i=0;i<=1;i++) for(j=0;j<=1;j++) b[i][j]=1; else if(n==1) for(i=0;i<=1;i++) for(j=0;j<=1;j++) b[i][j]=a[i][j]; else { for(t=1;t<n;t++) { for(i=0;i<=1;i++) for(j=0;j<=1;j++) b[i][j]=c[i][j]; for(i=0;i<=1;i++) for(j=0;j<=1;j++) c[i][j]=b[i][0]*a[0][j]+b[i][1]*a[1][j]; } for(i=0;i<=1;i++) for(j=0;j<=1;j++) b[i][j]=c[i][j]; } printf("\n矩阵B为:\n"); for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { printf("%25.0lf",b[i][j]); } printf("\n\n\n"); } printf("\n"); } return 0; } (c语言交流群:251975693,欢迎所有学习c语言的同道们的加入,有了你们,我们更加精彩!)
c语言练习之路(素数筛选) #include<stdio.h> #include<math.h> void main() { void yhsr(long *x,long *y),sssx(long x,long y); long a,b; long *a1=&a, *b1=&b; for(;;) { yhsr(a1,b1); sssx(a,b); } } void yhsr(long *x,long *y)//接受用户输入 { lon***; printf("求a与b之间的所有素数,请分别输入a、b (a、b均为正整数,且a<=b)\na="); scanf("%ld",&c); printf("b="); scanf("%ld",&d); *x=c; *y=d; } void sssx(long x,long y)//1.4优化算法 { void sssxzcx1(long * x,long y,long z,long * k),sssxzcx2(long * x,long y,long z,long * k); long sushu[95]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499}; long * shuzu=sushu;//shuzu=&sushu[0] long geshu=0,* k=&geshu; if(x<=500) { if(y<=500) { //直接输出结果 sssxzcx1(shuzu,x,y,k); } else { //输出部分结果,计算部分结果 sssxzcx1(shuzu,x,sushu[94],k); sssxzcx2(shuzu,sushu[94]+2,y,k); } } else { //计算全部结果 sssxzcx2(shuzu,x,y,k); } printf("\n共计%ld个。\n\n",geshu); } void sssxzcx1(long * x,long y,long z,long * k)//素数筛选1.4的子程序1,直接输出 { long i,a,b,* dizhi=x; for(i=0;i<=94;i++,x++) { if(*x>=y) { a=i; break; } } x=dizhi+94; for(i=94;i>=0;i--,x--) { if(*x<=z) { b=i; break; } } x=dizhi; for(i=a;i<=b;i++) { printf("%16ld",*(x+i)); ++(*k); } } void sssxzcx2(long * x,long y,long z,long * k){ long i,j,a,b,c,* dizhi=x; //将边界值奇化 if(y%2==0) { a=y+1; } else { a=y; } if(z%2==0) { b=z-1; } else { b=z; } for(i=a;i<=b;i=i+2) { if((long)(sqrt(i))%2==0) { c=(long)(sqrt(i))-1; } else { c=(long)(sqrt(i)); } if(c<=*(dizhi+94)) { x=dizhi; for(j=*(++x);j<=c;j=*(++x)) { if(i%j==0) break; } } else { x=dizhi; for(j=*(++x);j<=*(dizhi+94);j=*(++x)) { if(i%j==0) break; } if(i%j!=0) { for(j=*(dizhi+94)+2;j<=c;j=j+2) { if(i%j==0) break; } } } if(i%j!=0) { printf("%16ld",i); ++(*k); } } } (c语言交流群:251975693,欢迎所有学习c语言的同道们的加入,有了你们,我们更加精彩!)
武软新生群隆重招人啦 为了方便新生之间的交流,受学校委托,特建立一QQ群,欢迎广大新生的加入,及时了解最新消息。群号:252243624
诚招广大vb爱好者入群 今天新建了一个vb交流群,诚招广大vb爱好者入群,我做了五子棋(带声音、设置背景的)、行星模拟、qq账号管理器、vbs语言开发工具1.0等,在我的群共享里,群号是:251976861
『军旅怀乡.七律』 帐外吹箫林渐静, 云中舞剑日忽沉。 闲游未见烛光浅, 小憩方觉月影深。 碧水汀边皆过客, 青山顶处是离人。 蓬门尽展千秋业, 玉户谁怜百草恩?
1
下一页