C语言初学,光反射问题
假设一个房间5*6,在(3,1)向右上45度射出一光线,求指定的第k个坐标。如果遇到角落,即不会再反射。
如第四个坐标为(5,5),第五个为(1,1)角落,之后就无论输入k是多少,都是(1,1)
想了好久没有出好的方法,希望前辈指点
程序代码:#include<stdio.h>
typedef struct Node //这块是结构体的,不懂可以去看看这部分的东东,程序的思想内容一时不好解释,但开窍后理解上来就很简单了
{
int x;
int y;
int tx;
int ty;
}Node;
static Node S; //其实static可以不加,加了防止被其它文件引用造成混乱,对于单个文件而言可以不加
void fun()
{
if (S.tx==1)
S.x--;
else
S.x++;
if (S.ty==1)
S.y++;
else
S.y--;
}
void move(int *k)
{
int t=0;
if (S.x==1||S.x==5)
{
S.tx*=-1;
*k=*k-1;
t++;
}
if (S.y==1||S.y==6)
{
S.ty*=-1;
*k=*k-1;
t++;
}
if (t==2) //如果遇到角落,则不再反射
*k=1;
}
int main()
{
int k,count;
S.x=3;
S.y=1;
S.tx=1;
S.ty=1;
printf("请输入次数\n");
scanf("%d",&k);
count=k;
printf("光线的走向为\n");
while (k-1)
{
fun();
move(&k);
printf("[%d][%d]\n",S.x,S.y);
}
printf("第%d次落点为\n",count);
printf("[%d][%d]\n",S.x,S.y);
return 0;
}//应该是这样子了~[此贴子已经被作者于2016-12-3 14:19编辑过]

[此贴子已经被作者于2016-12-3 14:23编辑过]

程序代码:#include<stdio.h>
typedef struct Node //这块是结构体的,不懂可以去看看这部分的东东,程序的思想内容一时不好解释,但开窍后理解上来就很简单了
{
int x;
int y;
int tx;
int ty;
}Node;
static Node S; //其实static可以不加,加了防止被其它文件引用造成混乱,对于单个文件而言可以不加
void fun()
{
if (S.tx==1)
S.x--;
else
S.x++;
if (S.ty==1)
S.y++;
else
S.y--;
}
void move(int *k,int count)
{
int t=0;
if (S.x==1||S.x==5)
{
S.tx*=-1;
*k=*k-1;
t++;
}
if (S.y==1||S.y==6)
{
S.ty*=-1;
*k=*k-1;
t++;
}
if (t)
printf("第%d次落点[%d][%d]\n",count-*k+1,S.x,S.y);
else
printf(" 光线走向[%d][%d]\n",S.x,S.y);
if (t==2) //如果遇到角落,则不再反射
{
printf("光线遇到角落不再反射\n");
*k=1;
}
}
int main()
{
int k,count;
S.x=3;
S.y=1;
S.tx=1;
S.ty=1;
printf("请输入次数\n");
scanf("%d",&k);
count=k;
printf("光线的走向为\n");
printf("第%d次落点[%d][%d]\n",count-k+1,S.x,S.y);
while (k-1)
{
fun();
move(&k,count);
}
return 0;
}//应该是这样子了~
/*
x/y坐标图
-----------------
|x/y 1 2 3 4 5 6|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
-----------------*/ 