一天一道c++程序_一道c++问题
C=猫(CAT) M=老鼠(MOUSE) *=障碍物 .=空地
猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们"相遇"。注意,"对穿"是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。编程计算多少秒以后他们相遇。
Input10行,格式参考样例
Output
相遇时间T。如果无解,输出-1。
Sample Input*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
Sample Output
49
最佳答案
#include<iostream>using namespace std;char capitalize(char ch){ if (ch>='a'&& ch<='z') return ch-32; else return ch;}int main(){ int i; char cha[30]; cout<<"请输入一个英文句子"<<endl; cin.getline(cha,30); for (i=0;i<30;i++) { if (cha[i]=='\0')//当字符串结束的时候跳出循环 break; cout<<capitalize(cha[i]); } cout<<endl; return 0;}
追问:
你看题目了吗? 追答:
SourceoibhMy Program#include<iostream>#define N 10using namespace std;int main(){ int i,j,k,n; char map[N][N]; int cat_x,cat_y,cat_face; int mouse_x,mouse_y,mouse_face; int T; cin>>n; for(i=0;i<n;i++) { T=0; cat_face=mouse_face=1; for(j=0;j<N;j++) for(k=0;k<N;k++) { cin>>map[j][k]; if(map[j][k]=="C") { cat_x=k; cat_y=j; continue; } if(map[j][k]=="M") { mouse_x=k; mouse_y=j; continue; } } while(true) { if(mouse_x==cat_x&&mouse_y==cat_y) break; T++; switch(cat_face) { case 1: // face to North (up) if(cat_y!=0&&map[cat_y-1][cat_x]!="*") cat_y--; else cat_face=2; // turn right (West) break; case 2: // face to West (right) if(cat_x!=N-1&&map[cat_y][cat_x+1]!="*") cat_x++; else cat_face=3; // turn right (South) break; case 3: // face to South (down) if(cat_y!=N-1&&map[cat_y+1][cat_x]!="*") cat_y++; else cat_face=4; // turn right (East) break; case 4: // face to East (left) if(cat_x!=0&&map[cat_y][cat_x-1]!="*") cat_x--; else cat_face=1; // turn right (North) break; } switch(mouse_face) { case 1: // face to North (up) if(mouse_y!=0&&map[mouse_y-1][mouse_x]!="*") mouse_y--; else mouse_face=2; // turn right (West) break; case 2: // face to West (right) if(mouse_x!=N-1&&map[mouse_y][mouse_x+1]!="*") mouse_x++; else mouse_face=3; // turn right (South) break; case 3: // face to South (down) if(mouse_y!=N-1&&map[mouse_y+1][mouse_x]!="*") mouse_y++; else mouse_face=4; // turn right (East) break; case 4: // face to East (left) if(mouse_x!=0&&map[mouse_y][mouse_x-1]!="*") mouse_x--; else mouse_face=1; // turn right (North) break; } if(T>1000) break; } if(T==0||T>1000) cout<<-1<<endl; else cout<<T<<endl; } return 0;}YOYO"s Note:当T>1000时可以判断无解。之前因为忘记了结果TLE = = 模拟一遍就好了。
追问:
输入数据输入不了
追问:
看你那么认真,给采纳算了。这是我的程序:#include<iostream>using namespace std;char a[13][13];int cx,cy,mx,my;int ans;char flag="n",flag2="n";void mod(){ if(ans>=200){cout<<-1;return;} if(cx==mx && cy==my){cout<<ans<<endl;return;} switch(flag){ case "s":if(a[cx+1][cy]!="*")cx+=1;else flag="w";break; case "e":if(a[cx][cy+1]!="*")cy+=1;else flag="s";break; case "n":if(a[cx-1][cy]!="*")cx-=1;else flag="e";break; case "w":if(a[cx][cy-1]!="*")cy-=1;else flag="n";break; } switch(flag2){ case "s":if(a[mx+1][my]!="*")mx+=1;else flag2="w";break; case "e":if(a[mx][my+1]!="*")my+=1;else flag2="s";break; case "n":if(a[mx-1][my]!="*")mx-=1;else flag2="e";break; case "w":if(a[mx][my-1]!="*")my-=1;else flag2="n";break; } ans++; mod();}int main(){ int i,j; for(i=1;i<=10;i++) {for(j=1;j<=10;j++) {cin>>a[i][j]; if(a[i][j]=="C"){cx=i;cy=j;} if(a[i][j]=="M"){mx=i;my=j;} } } for(i=0;i<=11;i++)a[0][i]="*"; for(i=0;i<=11;i++)a[11][i]="*"; for(i=1;i<=10;i++){a[i][0]="*";a[i][11]="*";} mod(); return 0;}
追问:
谢谢你的帮助!
其他回答
暂无其它回答!