C#练习题答案: 使用密码播放【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

mac2025-03-03  12

使用密码播放【难度:2级】:

答案1:

using System; using System.Linq; public class PlayPass { private static string lib = "abcdefghijklmnopqrstuvwxyz"; public static string playPass(string s, int n) { string shifted = lib.Substring(n) + lib.Substring(0, n); return string.Concat(s.ToLower().Select((c, i) => { if(lib.Contains(c)) { char r = shifted[lib.IndexOf(c)]; return i % 2 == 0 ? Char.ToUpper(r) : r; } if(Char.IsDigit(c)) return (9 - Char.GetNumericValue(c)).ToString()[0]; return c; }).Reverse()); } }

答案2:

using System; using System.Linq; public class PlayPass { public static string playPass(string s, int n) { var chars = s.ToCharArray(); var ss = chars.Select((c, idx) => { if (char.IsLetter(c)) { if (char.IsLower(c)) { c = (char) (c + n > 122 ? c + n - 26 : c + n); } if (char.IsUpper(c)) { c = (char) (c + n > 90 ? c + n - 26 : c + n); } if (idx%2 == 1) { c = char.ToLower(c); } else { c = char.ToUpper(c); } return c; } if (char.IsNumber(c)) { return (char) (105 - c); } return c; }).Reverse().ToArray(); return new string(ss); } }

答案3:

using System; using System.Linq; public class PlayPass { public static string playPass(string s, int n) { Func<char, int> offset = (c) => char.IsUpper(c) ? 65 : 96; Func<char, int, char> letter = (c, i) => char.IsLetter(c) ? (char)(offset(c) + (c - offset(c) + i) % 26) : c; Func<char, char> digit = (c) => char.IsDigit(c) ? (9 - Int32.Parse(c.ToString())).ToString().First() : c; Func<char, int, char> rot = (c, i) => i % 2 == 0 ? char.ToUpper(c) : char.ToLower(c); return string.Join(String.Empty, s.ToCharArray().Select((c, i) => rot(digit(letter(c, n)),i)).Reverse().ToArray()); } }

答案4:

using System; public class PlayPass { public static string playPass(string s, int n) { bool up = true; char[] a = s.ToLower().ToCharArray(); for (var i = 0; i < a.Length; i++) { if (char.IsLetter(a[i])) { a[i] = (char)(a[i] + n); if (a[i] > 'z') { a[i] = (char)(a[i] - 26); } else if (a[i] < 'a') { a[i] = (char)(a[i] + 26); } } else if (char.IsNumber(a[i])) { a[i] = (9 - (int)Char.GetNumericValue(a[i])).ToString()[0]; } if (up) a[i] = char.ToUpper(a[i]); up = !up; } Array.Reverse(a); return new String(a); } }

答案5:

using System; public class PlayPass { public static string playPass(string s, int n) { string res=""; char tmp; for (int i = 0; i < s.Length; i++) { int cur=(int)s[i] + n; if (cur>90) cur=cur-90+64; if ((s[i] >= 'A') &amp;&amp; (s[i] <= 'Z')) tmp = (char)(cur); else if ((s[i] >= '0') &amp;&amp; (s[i] <= '9')) tmp = (char)((int)'9' - (int)s[i] + 48); else tmp = s[i]; if (i % 2 == 1) tmp = char.ToLower(tmp); res += tmp; } char[] arr = res.ToCharArray(); Array.Reverse(arr); return new string(arr); } }

答案6:

using System; using System.Collections; using System.Linq; public class PlayPass { public static string playPass(string s, int n) { // 1 var retValue = s.Select(o => char.IsLetter(o) ? char.IsUpper(o) ? (char)((o - 'A' + n) % 26 + 'A') : (char)((o - 'a' + n) % 26 + 'a') : o); // 2 retValue = retValue.Select(o => char.IsDigit(o) ? (char)(9 - o + 96) : o); // 3 // 4 retValue = retValue.Select((o,i) => char.IsLetter(o) ? i%2==0 ? char.ToUpper(o) : char.ToLower(o) : o); // 5 retValue = retValue.Reverse(); return string.Concat(retValue); } }

答案7:

using System; using System.Linq; public class PlayPass { public static string playPass(string s, int n) { return String.Join("", s.ToLower().ToArray() .Select(c => Char.IsDigit(c) ? (9 - char.GetNumericValue(c)).ToString()[0] : Char.IsLetter(c) ? (char)( ((int)c - (int)'a' + n) % 26 + (int)'a' ) : c) .Select((c, i) => i % 2 == 0 ? char.ToUpper(c) : char.ToLower(c)) .Reverse()); } }

答案8:

using System; public class PlayPass { public static string playPass(string s, int n) { string result = ""; for (int i = 0; i < s.Length; i++) { char prefixMe = s[i]; if (char.IsLetter(prefixMe)) { prefixMe = (char)((prefixMe - 'A' + n) % ('Z' - 'A' + 1) + 'A'); prefixMe = i % 2 == 1 ? char.ToLower(prefixMe) : char.ToUpper(prefixMe); } else if (char.IsDigit(prefixMe)) { prefixMe = (char)((9 - char.GetNumericValue(prefixMe)) + '0'); } result = prefixMe + result; } return result; } }

答案9:

using System; using System.Linq; public class PlayPass { public static String playPass(String Input, Int32 ShiftPositions) { return String.Join(String.Empty, Input.ToCharArray().Select((Char, Index) => { if (Char.IsDigit(Char)){ return (9 - int.Parse(Char.ToString())).ToString()[0]; } if (Char.IsLetter(Char)){ var newValue = (Char + ShiftPositions - 65) % 26; return (Char)(newValue + ((Index % 2 == 1) ? 97 : 65)); } return Char; }).Reverse()); } }

答案10:

using System; using System.Linq; public class PlayPass { public static string playPass(string s, int n) { // 1、字母移位n 2、数字变9-x 3、非数字、字母保持不变 4、奇数位字母小写 偶数位字母小写 5、颠倒 string rs=""; s=s.ToLower(); for (int i=0;i<s.Length;i++){ if (char.IsLetter(s[i])) rs=(char)((s[i]-97+n)%26+((i%2==0)?65:97))+rs; else if (char.IsNumber(s[i])) rs=(9-int.Parse(s[i].ToString()))+rs; else rs=s[i]+rs; } return rs; } }
最新回复(0)