日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《中国编程挑战赛--资格赛》赛题及解答

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《中国编程挑战赛--资格赛》赛题及解答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:

You are given a string[] grid representing a rectangular grid of letters. You are also given a string find, a word you are to find within the grid. The starting point may be

anywhere in the grid. The path may move up, down, left, right, or diagonally from one letter to the next, and may use letters in the grid more than once, but you may not stay

on the same cell twice in a row (see example 6 for clarification).
You are to return an int indicating the number of ways find can be found within the grid. If the result is more than 1,000,000,000, return -1.
Definition

Class:
WordPath
Method:
countPaths
Parameters:
string[], string
Returns:
int
Method signature:
int countPaths(string[] grid, string find)
(be sure your method is public)


Constraints
-
grid will contain between 1 and 50 elements, inclusive.
-
Each element of grid will contain between 1 and 50 uppercase ('A'-'Z') letters, inclusive.
-
Each element of grid will contain the same number of characters.
-
find will contain between 1 and 50 uppercase ('A'-'Z') letters, inclusive.
Examples
0)


{"ABC",
?"FED",
?"GHI"}
"ABCDEFGHI"
Returns: 1
There is only one way to trace this path. Each letter is used exactly once.
1)


{"ABC",
?"FED",
?"GAI"}
"ABCDEA"
Returns: 2
Once we get to the 'E', we can choose one of two directions for the final 'A'.
2)


{"ABC",
?"DEF",
?"GHI"}
"ABCD"
Returns: 0
We can trace a path for "ABC", but there's no way to complete a path to the letter 'D'.
3)


{"AA",
?"AA"}
"AAAA"
Returns: 108
We can start from any of the four locations. From each location, we can then move in any of the three possible directions for our second letter, and again for the third and

fourth letter. 4 * 3 * 3 * 3 = 108.
4)


{"ABABA",
?"BABAB",
?"ABABA",
?"BABAB",
?"ABABA"}
"ABABABBA"
Returns: 56448
There are a lot of ways to trace this path.
5)


{"AAAAA",
?"AAAAA",
?"AAAAA",
?"AAAAA",
?"AAAAA"}
"AAAAAAAAAAA"
Returns: -1
There are well over 1,000,000,000 paths that can be traced.
6)


{"AB",
?"CD"}
"AA"
Returns: 0
Since we can't stay on the same cell, we can't trace the path at all.

我的解答:

?1????public?class?WordPath
?2????{
?3????????public?int?countPaths(string[]?grid,?string?find)
?4????????{
?5????????????int?gridWidth=grid[0].Length;//grid的“寬度”
?6????????????int?gridHeight=grid.Length;//grid的“高度”
?7????????????char[,]?gc=new?char[gridWidth,gridHeight];//將一維string數組轉化為二維char數組
?8????????????for?(int?h=0;h<gridHeight;h++)
?9????????????{
10????????????????for?(int?w=0;w<gridWidth;w++)
11????????????????{
12????????????????????gc[w,h]=grid[h].ToCharArray()[w];
13????????????????}

14????????????}

15
16????????????char[]?fc=find.ToCharArray();//將string轉化為char數組
17????????????int?count=0;//臨時計數器
18
19????????????for?(int?x=0;x<gc.GetLength(0);x++)
20????????????{
21????????????????for?(int?y=0;y<gc.GetLength(1);y++)
22????????????????{
23????????????????????if?(gc[x,y]==fc[0])?next(gc,x,y,fc,1,ref?count);?//找到第一個對應char后開始搜索相臨位置
24????????????????}

25????????????}

26????????????return?(count>1000000000?-1:count);
27????????}
//end?Mothed?countPaths
28
29????????private?void?next(char[,]?gc,int?x,int?y,char[]?fc,int?index,ref?int?count)
30????????{
31????????????int?xStart=x>0?x-1:x;
32????????????int?xEnd=x<gc.GetLength(0)-1?x+1:x;
33????????????int?yStart=y>0?y-1:y;
34????????????int?yEnd=y<gc.GetLength(1)-1?y+1:y;
35
36????????????for?(int?xi=xStart;xi<=xEnd;xi++)
37????????????{
38????????????????for?(int?yi=yStart;yi<=yEnd;yi++)
39????????????????{
40????????????????????if?((!(xi==x&&yi==y))&&gc[xi,yi]==fc[index])//在相鄰位置找到下一個char
41????????????????????{
42????????????????????????if?(index==fc.Length-1)//如果已經搜索到最后一個char,計數器加1
43????????????????????????{
44????????????????????????????count++;
45????????????????????????}

46????????????????????????else
47????????????????????????{
48????????????????????????????if?(count<=1000000000)?next(gc,xi,yi,fc,index+1,ref?count);//下一輪搜索??
49????????????????????????}

50????????????????????}

51????????????????}

52????????????}

53????????}
//end?Method?next
54
55????}
希望大家發表更好的答案。

轉載于:https://www.cnblogs.com/chinadhf/archive/2005/12/18/299788.html

總結

以上是生活随笔為你收集整理的《中国编程挑战赛--资格赛》赛题及解答的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。