解决方案 »
- VS2005查找替换界面显示不出来,但能接受输入。这是啥原因啊
- 中秋散分
- 通过远程线程注入DLL,获取目标进程中窗口的窗口处理过程
- GetProcAddress()访问函数名的问题
- iocp完成端口的问题(高级)
- 对数据库进行select出现异常(高手进来一下)
- 各位用过DrawDib系列视频函数显示视频的大侠近来看看,这是怎么回事?
- 怎么样从VC中查看修改VTK的代码?(100分小小意思,不成敬意,^_^)
- 请问在VC中如何用ADO或DAO创建一个自由表(.DBF)?
- 请问注册专业会员有什么好处
- 在VC中怎样做出像Windows 2003 Sever中的资源管理器左边文件夹视图一样的分割视图?
- 协议栈,win socket,wininet,apache http component之间的关系?
所以你得告诉我们映射的规则。其实有了这个规则,就是写程序的逻辑结构了。
比如你给的这几个数。规则如下:
1.m(j)只有0和1组成。
2.n(j)与m(j)一一对应。
3.0对应于0;
4.以0为分割线,n(j)中开始计数,第一次遇见1时改为1,第二次遇见1时改为2.
你只要在n(j)中做一个计数,看目前出现了几个分割符(一个或几个0)。
1.m(j)只有0和1组成。
2.n(j)与m(j)一一对应。
3.0对应于0;
4.以0为分割线,n(j)中开始计数,第一次遇见1时改为1,第二次遇见1时改为2.
你只要在n(j)中做一个计数,看目前出现了几个分割符(一个或几个0)。哈哈,和daredjever说的一样,那么知道怎么搞嘛
我现在是这么搞的 if(m(i-1,j)==0
n(i,j)=++count;
else
n(i,j)=m(i-1,j); 得出来的数据是
m(j) n(j)
0 0
0 0
0 0
1 1
1 2
1 3
0 0
0 0
0 0
1 4
1 5
0 0
0 0
0 0
1 7
1 8
1 9
0 0
0 0
1 10我感到不解!!
0 0
第n次出现1,将n(j)的值置为n;int n=1;
int n = 1;
int i = 0;
BOOL s = FALSE;
int len = sizeof(m)/sizeof(type);
for(i = 0; i < len; i++)
{
if(m[i] == 0)
{
n[i] = m[i];
if(s)
{
s = !s;
n++;
}
}
else
{
n[i] = n;
if(!s)
s = !s;
}
}
就是设置一个标志flag来记录由0转1和1转0的位置
只有当读取的数值由0转向1时,flag置true,计数器count++;其他情况flag都置为false
判断读取的数值如果非0,则置为count;
判断flag为false切读取数值为0,则为置0。
算法很简单,
定义一个变量A = 0
左侧列差分 x = m(j+1)-m(j),如果x>0,累加到A
定义第二个变量 B = m(j) * A,即可得到对应的 n(j)的值 。
int g_mPrevValue=0;int CalcN(int m)
{
if(m==0 || m==g_mPrevValue) return (g_mPrevValue=0);
g_mPrevValue=m;
return g_nCurValue++;
}
int g_mPrevValue=0; int CalcN(int m)
{
if(m==0) return (g_mPrevValue=0);
if(m==g_mPrevValue) return g_nCurValue;
g_mPrevValue=m;
return g_nCurValue++;
}