| 个人资料Wellsleep存作业的地方日志列表 | 帮助 |
|
2月6日 干掉DLL木马~~~终于费尽的干死DLL木马……Kapasky报木马,Iparmar找不到,木马分析专家找不到。OK,现学现卖,用System Repair Engneering。传闻Hi jackthis扫描不到线程,真是恐怖……
方法:
Kapasky报找到 irjrt.dll为后门病毒,并且无法删除,怀疑挂接系统关键线程。用SRE扫描得到验证,挂接的正是重要的Rundll32.exe。找到dll的目录为windows/system32/wbem/irjit.dll,记住路径,重起进入纯DOS,del irjit.dll,重起进win,不再报马。 1月25日 二进制转八、十六进制&十进制转N进制方法二进制转为 8 进制,可以 3 位二进制位编为一组(不够左侧补 0),然后从右边开始每三位按如下方式替换:
000 - 0, 001 - 1, 010 - 2, 011 - 3, 100 - 4, 101 - 5, 110 - 6, 111 - 7. 比如转换二进制数 1110101010100 那么分组为 001 110 101 010 100 按照转换方法对应转换 1 6 5 2 4 所以 1110101010100(2) = 16524(8) 又如转换为 16 进制 0000 - 0, 0001 - 1, 0010 - 2, 0011 - 3 0100 - 4, 0101 - 5, 0110 - 6, 0111 - 7 1000 - 8, 1001 - 9, 1010 - A, 1011 - B 1100 - C, 1101 - D, 1110 - E, 1111 - F 此时分组为 4 位二进制数为一组 比如转换二进制 0101010100101011010,分组: 0010 1010 1001 0101 1010 2 A 9 5 A 所以0101010100101011010(2) = 2A95A(16) 如果要 16 转 2,8 转 2,方法类似, 如果是 16 转 8,可以转换为 2 再转 8 十进制转各进制 要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。 一、十进制转二进制 如:55转为二进制 2|55 27――1 个位 13――1 第二位 6――1 第三位 3――0 第四位 1――1 第五位 最后被除数1为第七位,即得110111 二、十进制转八进制 如:5621转为八进制 8|5621 702 ―― 5 第一位(个位) 87 ―― 6 第二位 10 ―― 7 第三位 1 ―― 2 第四位 最后得八进制数:127658 三、十进制数十六进制 如:76521转为十六进制 16|76521 4726 ――5 第一位(个位) 295 ――6 第二位 18 ――6 第三位 1 ―― 2 第四位 最后得1276516 二进制与十六进制的关系 2进制 0000 0001 0010 0011 0100 0101 0110 0111 16进制 0 1 2 3 4 5 6 7 2进制 1000 1001 1010 1011 1100 1101 1110 1111 16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15) 可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为: 3为0011,A 为1010,合并起来为00111010。可以将最左边的0去掉得1110102 右要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。 二进制与八进制间的关系 二进制 000 001 010 011 100 101 110 111 八进制 0 1 2 3 4 5 6 7 二进制与八进制的关系类似于二进制与十六进制的关系,以八进制的各数为0到7,以三位二进制数来表示。如要将51028 转为二进制,5为101,1为001,0为000,2为010,将这些数的二进制合并后为1010010000102,即是二进制的值。 若要将二进制转为八进制,将二进制的位数由右向左每三位一个单位分隔,将事单位对照出八进制的值即可。 12月21日 SOS!!!失败的数组实验,求高手帮忙~!题目要求:在[3][6]的数组中,前五列储存3个学生的成绩,每行最后一列是该行的平均数。按数组格式打印(我没有写这个格式的代码)。SOS!
int aver(int arr[5])
{ int i,m=0,k; for(i=0;i<=4;i++) { m=m+arr[i]; } k=m/5; return k; } main() { int i,j,a[3][6]; for(j=0;j<=2;j++) { for(i=0;i<=4;i++) { scanf("%d",&a[j][i]); } } for(j=0;j<=2;j++) { for(i=0;i<=4;i++) { a[j][5]=aver(a[j][i]); } } for(j=0;j<=2;j++) { for(i=0;i<=5;i++) { printf("%d",a[j][i]); } } getch(); } 12月18日 BT的魔方阵解法@TC FROM Internet关于魔方阵的解法 作者:unknown 更新时间: 2005-05-10
首先把从1~n2的整数按从小到大的顺序排列成一个n×n的方阵A进行观察。(本文中所有n都是指大于1的奇数,下文中均以"A"代表这类顺序排列的n×n方阵) 以5阶阵为例:以下是A方阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 下边是魔方阵B: 12 16 25 4 8 6 15 19 23 2 5 9 13 17 21 24 3 7 11 20 18 22 1 10 14 先假设n阶奇次魔方阵B是存在的,从A中可以看出,B的任一元素在A中都有唯一确定的行号和列号组合(y,x)。 分离出B中所有元素在A中的行号y来构成n×n方阵I,让I(i,j)等于从B(i,j)分离出来的y;(如I(1,1) =3,即12在A中的行号A(3,2);I(1,2)=4,即16在A中的行号A(4,1)。)以下是I方阵: 3 4 5 1 2 2 3 4 5 1 1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 同样分离出B中所有元素在A中的列号y来构成n×n方阵J,让J(i,j)等于从B(i,j)分离出来的x。以下是J方阵 2 1 5 4 3 1 5 4 3 2 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 观察方阵I特征为:
1.组成方阵的数为1~n的整数;
2.任一行、列均遍历1~n的所有整数;
3.主对角线上的数均为(n+1)/2,辅对角线遍历1~n的所有整数。
方阵J特征前两点同I,区别是第三点,辅对角线上的数均为(n+1)/2,主对角线遍历1~n的所有整数。 另外还有容易忽略的一点,I、J方阵对应位置上的数字组合[I(i,j),J(i,j)]是唯一的。 综合以上的结论可以知道:B(i,j)=(I(i,j)-1)×n+J(i,j)。所以只要构造出这样两个只含1~n的数的方阵I和J,就可以确定一个n×n的魔方阵。 现在,问题就转化为怎样构造分别满足I和J的特征的两个n×n方阵。其实完成这样的算法是很简单的,可以按以下方法实现:
1) 方阵I的第一行由(n+1)/2打头,后面依次为前一个数关于n的循环后继;
2)方阵I的第i+1行由第i行循环右移得到。
本人给出的程序:
main() { int n,i,j; int a[20][20],x[20][20],y[20][20];/* a数组为最后结果数组文中的B方阵,X,Y分别是文中提到的数组I,J*/ printf("please input the number:"); scanf("%d",&n); /*输入需要的数组维数*/ x[0][0]=(n+1)/2; for(j=1;j<n;j++) { if(x[0][j-1]==n) x[0][j]=x[0][j-1]+1-n; else x[0][j]=x[0][j-1]+1; }/*给x中的第一行元素赋值*/
for(i=1;i<n;i++) for(j=0;j<n;j++) { if(j-1<0) x[i][j]=x[i-1][j-1+n]; else x[i][j]=x[i-1][j-1]; } /*通过变换给X的所有元素赋值*/ clrscr(); printf("X:\n"); for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("%3d",x[i][j]); if(j==n-1)printf("\n"); }/*输出X数组*/ for(i=0;i<n;i++) for(j=0;j<n;j++) y[i][j]=x[i][n-1-j];/*通过文中提到的公式给Y数组赋值*/ printf("Y:\n"); for(i=0;i<n;i++) for(j=0;j<n;j++) {printf("%3d",y[i][j]); if(j==n-1)printf("\n"); }/*输出Y数组*/ for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=(x[i][j]-1)*n+y[i][j]; printf("A:\n"); for(i=0;i<n;i++) for(j=0;j<n;j++) {printf("%5d",a[i][j]); if(j==n-1)printf("\n");} /*输出A数组结果*/
}
12月12日 筛法求100以内素数@WinTC By YYH佩服死他了~自学能有如此成就……
#include <stdio.h>
#define N 100 /*划定寻找质数范围在100以内*/ main () { int a[N]; int i,j; for (i=1;i<=N;i++) {a[i-1]=i;} for (i=2;i<=N-1;i++) { for (j=1;j<=N-1;j++) { if (a[j]/i>=2&&a[j]%i==0)/*筛法*/ a[j]=0; /*消去合数*/ } } for (i=0;i<=N-1;i++) if (a[i]!=0&&a[i]!=1)/*只打印剩下的质数*/ printf ("%4d",a[i]); getch (); } /*开头的define就把我镇住了,汗,忘记应该用这个定义常数*/ 12月10日 求“水仙花数”@WinTC水仙花数意味,三位数各个数位的数字的立方等于该三位数。
/*ShXHua.c -- <1000 ShuiXianHua shu */
#include "stdio.h"
#include "math.h" int cube(int x) /*第一次用子函数,好方便*/ { int k; k=pow(x,3); return(k); } main()
{ int a,b,c,i; for(i=100;i<=999;i++) { a=i/100; /*求百位数字*/ b=(i/10)%10; /*求十位数字,想出这个方法感觉挺爽的*/ c=i%10; /*求个位数字*/ if(i==cube(a)+cube(b)+cube(c)) /*这一行的“==”真是把我害苦了,先前写的“=”被当作赋值*/ printf("%d is a ShuiXianHua No.\n",i); } getch(); } 求"n+nn+nnn+...+n位数"每一位为n的数@Win-TC/* n_num.C -- N sum */
#include "stdio.h"
#include "math.h" main() { int i,n,s,k,w=0; scanf("%d,%d",&n,&k); /*n为位数,k为每一位的数字*/ for(i=1;i<=n;i++) {s=k*i*pow(10,n-i); w=w+s;} printf("%d\n",w); getch(); /*神奇的WinTC在XP环境下必须加上的函数,似乎用来暂停*/ } |
|
||||
|
|