1、数制转换问题。数制转换问题是将任意一个非负的十进制数转换为其它进制的数,这是计算机实现计算的基本问题。其一般的解决方法的利用辗转相除法。以将一个十进制数N转换为八进制数为例进行说明。假设N=5142,示例图:
N N/8(整除) N%8(求余) 低
5142 642 6
642 80 2
80 10 0
10 1 2
1 0 1 高
从图可知,(5142)10=(12026)8。编写一个控制台程序,实现十进制数转换成八进制数
(提示:转换得到的八进制数各个数位是按从低位到高位的顺序产生的,而转换结果的输出通常是按照从高位到低位的顺序依次输出。也就是说,输出的顺序与产生的顺序正好相反,这与栈的操作原则相符。所以,在转换过程中可以使用一个栈,每得到一位八进制数将其入栈,转换完毕之后再依次出栈。)
答案: Console.WriteLine("输入十进制数字:");
string s = Console.ReadLine();
int n = Convert.ToInt32(s);
Stack st = new Stack();
int temp;
for (int i = 0; i < s.Length; i++)
{
if (n /8 != 0)
{
temp = n%8;
st.Push(temp);
}
n = n / 8;
}
st.Push(1);
Console.WriteLine("转化为八进制为:");
foreach (var item in st)
{
Console.Write(item);
}
Console.ReadKey();
2、编写一个控制台程序,把控制台输入的数组字符串(如:"123")转换为中文大写(如:壹贰叁)。(要求使用Dictonary<T>)
答案: Console.WriteLine("输入字符串");
string s = Console.ReadLine();
Dictionary<string, string> di = new Dictionary<string, string>();
string temp;
di.Add("0", "零?");
di.Add("1", "壹?");
di.Add("2", "贰?");
di.Add("3", "叁╰");
di.Add("4", "肆á");
di.Add("5", "伍é");
di.Add("6", "陆?");
di.Add("7", "柒a");
di.Add("8", "仈?");
di.Add("9", "九?");
Console.WriteLine("转化为汉字形式:");
for (int i = 0; i < s.Length; i++)
{
temp = s.Substring(i, 1);
Console.Write(di[temp]);
}
Console.ReadKey();
3、编写一个控制台程序,实现List<T>的添加、插入、删除、查找、排序等功能。
List<int> li = new List<int>();
li.Add(1);
li.Add(2);
li.Add(9);
li.Add(6);
li.Add(3);
li.Add(7); //添?加ó
foreach (var item in li)
{
Console.WriteLine(item);
}
Console.WriteLine("********");
li.Insert(1, 8); //插?入?
foreach (var item in li)
{
Console.WriteLine(item);
}
Console.WriteLine("********");
li.Remove(8); //移?除y
foreach (var item in li)
{
Console.WriteLine(item);
}
Console.WriteLine("********");
li.Sort(); //排?序ò
foreach (var item in li)
{
Console.WriteLine(item);
}
Console.WriteLine("********");
Console.ReadKey();
拓展:软件设计大赛题目
文字祖玛游戏,需求如下:
1).程序通过控制台输出一个字符串,由A、B、C、D、E五个字母组成,例如:ACBEEBBAD。
2).用户输入一个字符,只能是A、B、C、D、E其中之一,然后再输入一个要插入的位置。
3).程序会将这个字符插入到字符串的指定位置前(第一个字符位置为0,第二个字符位置为1,依此类推),然后消除连续出现的三个相同的字符,直到没有连续三个相同的字符为止。
例如:
控制台输出:ACBEEBBAD
用户输入:E, 3
控制台输出:ACAD
以上示例表示:在位置3插入E后,结果是:ACBEEEBBAD,消除连续的三个E,结果是:ACBBBAD再次消除连续三个B,结果是:ACAD。
要求如下:
A.为实现此游戏,需要设计一个方法DealString()
/**
* 参数:
* str: 原始字符串
* index: 要插入字符的位置
* letter: 要插入的字符
* 返回结果: 经过处理后的字符串
**/
答案:
class Program
{
static string DealString(string st,string let,int m)
{
string temp = st.Insert(m, let);
for (int i = 0; i < temp.Length - 2; i++)
{
if (temp[i] == temp[i + 1])
{
if (temp[i + 1] == temp[i + 2])
{
temp = temp.Remove(i, 3);
i = 0;
}
}
}
return temp;
}
static void Main(string[] args)
{
string str = "ACBEEBBAD";
Console.WriteLine("原字符串"+str);
Console.WriteLine("输入插入字符和插入的位置");
string letter = Console.ReadLine();
string i = Console.ReadLine();
int index = Convert.ToInt32(i);
Console.WriteLine("新的字符串");
string result = DealString(str,letter,index);
Console.WriteLine(result);
Console.ReadKey();
}
}
}