麻烦各位高手看下面的程序,然后主要解释memset(to,0,sizeofto))这句在这段程序中的作用就可以了。急急急!!!

zhangyongnihao1 2009-07-10 12:45:01
其中的三维数组也不太明白。大家看看
#include<stdio.h>
#include<string.h>

int a[7][7]={{0,0,1,2,3,0,0},{0,0,4,5,6,0,0},{7,8,9,10,11,12,13},
{14,15,16,17,18,19,20},{21,22,23,24,25,26,27},
{0,0,28,29,30,0,0},{0,0,31,32,33,0,0}};
int b[35][4][2],to[35];
int main()
{
int i,j,k,t;
memset(to,0,sizeof(to));
for(i=0;i<7;i++){
for(j=0;j<7;j++){
if(a[i][j]==0) continue;
k=a[i][j];
if(i<=4&&a[i+2][j]) {
b[k][to[k]][0]=a[i+2][j]; b[k][to[k]++][1]=a[i+1][j];
}
if(j<=4&&a[i][j+2]) {
b[k][to[k]][0]=a[i][j+2]; b[k][to[k]++][1]=a[i][j+1];
}
if(j>=2&&a[i][j-2]) {
b[k][to[k]][0]=a[i][j-2]; b[k][to[k]++][1]=a[i][j-1];
}
if(i>=2&&a[i-2][j]) {
b[k][to[k]][0]=a[i-2][j]; b[k][to[k]++][1]=a[i-1][j];
}
}
}
to[1]=to[3]=2; to[2]=1;
bool vis[36];
printf("HI Q OUTPUT\n");
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
while(scanf("%d",&k),k) vis[k]=1;
while(1)
{
for(i=33;i>=1;i--) if(vis[i]==0)
{
for(j=0;j<to[i];j++) if(vis[b[i][j][0]]==1&&vis[b[i][j][1]]==1) break;
if(j<to[i]) break;
}
if(i==0) break;
vis[b[i][j][0]]=vis[b[i][j][1]]=0; vis[i]=1;
}
k=0;
for(i=1;i<=33;i++) if(vis[i]) k+=i;
printf("%d\n",k);
}
printf("END OF OUTPUT\n");
return 0;
}

...全文
101 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyongnihao1 2009-07-15
  • 打赏
  • 举报
回复
谢谢大家了!
sbgeqh 2009-07-11
  • 打赏
  • 举报
回复
//void *memset(void *s, char ch, unsigned n);
//将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,
//块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

bool vis[36];
int to[35];
memset(vis,0,sizeof(vis)); //把vis的每个字节的内容全部设置为0

memset(to,0,sizeof(to));//把to的每个字节的内容全部设置为0
shang_125 2009-07-11
  • 打赏
  • 举报
回复
在内存中给to分配空间
ies_sweet 2009-07-10
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

int a[7][7]={{0,0,1,2,3,0,0},
{0,0,4,5,6,0,0},
{7,8,9,10,11,12,13},
{14,15,16,17,18,19,20},
{21,22,23,24,25,26,27},
{0,0,28,29,30,0,0},
{0,0,31,32,33,0,0}};
int b[35][4][2],to[35];
int main()
{
int i,j,k,t;
memset(to,0,sizeof(to));
for(i=0;i <7;i++)
{
for(j=0;j <7;j++)
{
if(a[i][j]==0)
{
continue;
}
k=a[i][j];
if(i <=4&&a[i+2][j])
{
b[k][to[k]][0]=a[i+2][j];
b[k][to[k]++][1]=a[i+1][j];
}
if(j <=4&&a[i][j+2])
{
b[k][to[k]][0]=a[i][j+2];
b[k][to[k]++][1]=a[i][j+1];
}
if(j>=2&&a[i][j-2])
{
b[k][to[k]][0]=a[i][j-2];
b[k][to[k]++][1]=a[i][j-1];
}
if(i>=2&&a[i-2][j])
{
b[k][to[k]][0]=a[i-2][j];
b[k][to[k]++][1]=a[i-1][j];
}
}
}

to[1]=to[3]=2; to[2]=1;
bool vis[36];
printf("HI Q OUTPUT\n");
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
while(scanf("%d",&k),k)
{
vis[k]=1;
}
while(1)
{
for(i=33;i>=1;i--)
{
if(vis[i]==0)
{
for(j=0;j <to[i];j++)
{
if(vis[b[i][j][0]]==1&&vis[b[i][j][1]]==1)
{
break;
}
if(j <to[i])
{
break;
}
}
if(i==0)
{
break;
}
vis[b[i][j][0]] = vis[b[i][j][1]]=0;
vis[i] = 1;
}
k = 0;
for(i=1;i <=33;i++)
{
if(vis[i])
{
k+=i;
}
printf("%d\n",k);
}
printf("END OF OUTPUT\n");

return 0;
}


费了半天劲,括号好像还没有对齐。。。
万猫学社 2009-07-10
  • 打赏
  • 举报
回复
其实百度一下就可以找到!
万猫学社 2009-07-10
  • 打赏
  • 举报
回复
http://www.ggv.com.cn/forum/clib/string/memset.html
zhangyongnihao1 2009-07-10
  • 打赏
  • 举报
回复
谢谢大家的帮忙,其实这是我帮别人问的,他只给了我源代码,说是一个纸牌游戏。大家看看这道题具体是要干什么啊?to数组和memset(vis,0,sizeof(vis)); memset(to,0,sizeof(to));这两句还是不明白 这是什么意思。谢谢大家
kofkim 2009-07-10
  • 打赏
  • 举报
回复
编译器和平台不同 memset 参数适宜用sizeof 取得
liaoweixiaoyu 2009-07-10
  • 打赏
  • 举报
回复
初始化为0
Fleeboy 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 blh 的回复:]
memset(to,0,sizeof(to));
在你的程序里完全可以不写,呵呵,因为to是全局未初始化变量,程序执行时会被自动赋0

另外不知道你要解释什么?
[/Quote]
  • 打赏
  • 举报
回复
memset(to,0,sizeof(to));

就是设置从to指针开始的sizeof(to)字节个数据为0,还有问题不?
blh 2009-07-10
  • 打赏
  • 举报
回复
memset(to,0,sizeof(to));
在你的程序里完全可以不写,呵呵,因为to是全局未初始化变量,程序执行时会被自动赋0

另外不知道你要解释什么?
yrqing718 2009-07-10
  • 打赏
  • 举报
回复
把数组元素初始化为0
可以查MSDN
大前置 2009-07-10
  • 打赏
  • 举报
回复
在这里的作用就是置整型数组的元素为0;
大前置 2009-07-10
  • 打赏
  • 举报
回复
#include <string.h>
void *memset( void *buffer, int ch, size_t count );


功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。例如:

memset( the_array, '\0', sizeof(the_array) );
这是将一个数组的所以分量设置成零的很便捷的方法。

ShowMan 2009-07-10
  • 打赏
  • 举报
回复
初始化数组。
kondykuang 2009-07-10
  • 打赏
  • 举报
回复
把数组的内容 全部 置零··
以免你在使用的时候出现乱码 抑或是为了在程序中做某种标志用的··

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧