Liny_@NotePad

沉迷ACG中

合并排序实现

 = =

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. /******************************************
  5. * 合并两个有序的子数组
  6. *
  7. * 输入:整数数组A[],下标p,q,r,元素个数m
  8. *            其中A[p]~A[q]和A[q+1]~A[r]已按递增顺序排序
  9. * 输出:按递增顺序排序的子数组A[p]~A[r]
  10. ******************************************/
  11. void merge(int A[], int p, int q, int r, int m){
  12.         int *bp = new int[m];
  13.         int i,j,k;
  14.         i = p; j = q+1; k=0;
  15.         while(i<=q&&j<=r){      //    i从p开始,j从q+1开始 比较A[i]和A[j],递减放入新数组
  16.                 if(A[i]<=A[j]){
  17.                         bp[k++] = A[i++];
  18.                 }else{
  19.                         bp[k++] = A[j++];
  20.                 }
  21.         }
  22.         if(i==q+1){     // 若A[p]~A[q]已经输入完,则将A[q+1]~A[r]中未录入的继续录入
  23.                 for(;j<=r;j++){
  24.                         bp[k++] = A[j];
  25.                 }
  26.         }else{  //        若A[q+1]~A[r]已经输入完,则A[p]~A[q]将中未录入的继续录入
  27.                 for(;i<=q;i++){
  28.                         bp[k++] = A[i];
  29.                 }
  30.         }
  31.         k = 0;
  32.         for(i=p; i<=r; i++){    //  把排序好的数存回A
  33.                 A[i] = bp[k++];
  34.         }
  35.         delete bp;
  36. }
  37.  
  38. /******************************************
  39. * 合并排序算法
  40. *
  41. * 输入:具有n个元素的数组A[]
  42. * 输出:按递增顺序排序的数组A[]
  43. ******************************************/
  44. void merge_sort(int A[], int n){
  45.         int i,s,t = 1;
  46.         while(t<n){     //   每2个含t/2个元素的数组进行合并,合并完后t*2
  47.                 s = t, t = 2*s, i = 0;
  48.                 while(i+t<n){
  49.                         merge(A,i,i+s-1,i+t-1,t);
  50.                         i = i + t;
  51.                 }
  52.                 if(i+s<n){
  53.                         merge(A,i,i+s-1,n-1,n-i);
  54.                 }
  55.         }
  56. }
  57.  
  58. int main(){
  59.         int i,n;
  60.  
  61.         cout<<"请输入数组元素个数:";
  62.         cin>>n;
  63.  
  64.         cout<<"请输入元素:"<<endl;
  65.         int* A = new int[n];
  66.         for(i=0;i<n;i++){
  67.                 cin>>A[i];
  68.         }
  69.  
  70.         merge_sort(A,n);
  71.  
  72.         cout<<"排序结果:"<<endl<<A[0];
  73.         for(i=1;i<n;i++){
  74.                 cout<<" "<<A[i];
  75.         }
  76.         cout<<endl;
  77.  
  78.         return 0;
  79. }

同时只能运行一个程序实例的实现

做软工作业的机房管理系统,各个计算机要有一个监听自身信息的客户端,于是就牵出了一个同时只能运行一个实例的问题。

其实想想也很简单。因为对于现在应用的各个操作系统,都有端口存在,而一个端口只能被一个程序所占用,

因此,在实例化之前只需要启动一个Socket去连接该应用程序所占用的端口,如果能连接上表示该端口已经启动了一个ServerSocket,

不能连接上则启动一个ServerSocket来占用它即可。

但是有个小缺陷:有可能别的程序也占用了该端口,因此很考验RP 。 - -

C的RSA密码算法实现

C写的,囧,网络课本上看过,对于我这种数学白痴怎么可能会?拖住wekooo要了公式,随便写写……

Struts2零配置

百度了下,貌似有使用Annotations和CoC两种。
但它们并不是真正的零配置,只是在一定情况下简化了。
我还是会比较喜欢原版的 = = 不过蛮写个demo看看。

Struts2文件下载

一个简单的利用struts2做文件下载的demo……

Struts2中拦截器与过滤器的执行顺序

通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。

糖果机的状态转换。。

一台糖果机,支持n种操作,譬如:投入硬币、退还硬币、转动曲柄、填充糖果……
而不同状态下不同操作返回的内容不一样。下面是它的状态转换图:

如何实现它的转换呢?

存档读档的Memento——备忘录模式

在玩游戏的时候我们总要存档、读档,
怎样实现这个功能呢?