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 | -----------------*/