码迷,mamicode.com
首页 > 编程语言 > 详细

啃啃算法1

时间:2018-06-13 23:39:16      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:select   man   .so   from   char   tom   组成   master   play   

1.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

static int F1(int m)
{
int sum = 0;
bool flag = true;
for (int i = 1; i < m; i++)
{
if (flag)
{
sum += i;
}
else
{
sum -= i;
}
flag = !flag;
}
return sum;
}
 

//通过奇偶性
static int F2(int m)
{
int sum = 0;
for (int i = 1; i <= m; i++)
{
if (i % 2 >0) //即为奇数
sum += i;
else
sum -= i;
}
return sum;
}

2.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
 

int count = 0; //统计个数
for (int bw = 1; bw <= 4; bw++)
{
for (int sw = 1; sw <= 4; sw++)
{
if (sw!= bw) //很显然,只有百位和十位不同的情况下才能谈个位。
{
for (int gw = 1; gw <= 4; gw++)
{
if (gw != sw && gw != bw) //百位用过的,十位就不能用;百位和十位都用过的,个位就不能用
{
count++;
Console.WriteLine("{0}{1}{2}", bw, sw, gw);
}
}
}
}
}

 

3.、一个6位数乘以一个3位数,得到一个结果。但不清楚6位数的两个数字是什么,而且结果中有一位数字也不清楚,请编程找出问好代表的数字,答案可能有多个。

表达式:12?56?*123 = 154?4987

 

for (int a = 0; a < 10; a++)
{
for (int b = 0; b < 10; b++)
{
for (int c = 0; c < 10; c++)
{
if ((120560 + a + b * 1000) * 123 == 15404987 + c * 10000)
{
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
}
}
}
}

 

4. 1、1、2、3、5、8、13、21、34,....用C#递归写出算法,算出第30个数。


static in F(int i)
{
if(i<=0)
return 0;
else if(i>0 && i<=2)
return 1;
else return F(i-1) + F(i-2);
}

static void Main(string[] args)
{
int n = F(30);
Console.WriteLine(n.ToString());
}

 

递归不需要循环啊

5.有一个字符串 "I am a good man",设计一个函数,返回 "man good a am I"。

public string F(string i)
{
string[] bill = i.Split(‘ ‘);
Stack<string> bike = new Stack<string>();
foreach (var item in bill)
{
bike.Push(item);
}
string[] temp = new string[bike.Count];
int gao = bike.Count;
for (int s = 0; s < gao; s++)
{
temp[s] = bike.Pop();
}
string k = string.Join(" ", temp);
return k;
}

方法二

static string Reverse()
{
string s = "I am a good man";
string[] arr = s.Split(‘ ‘);
string res = "";
for (int i = arr.Length - 1; i >= 0; i--)
{
res += arr[i];
if (i > 0)
res += " ";
}
return res;
}

6.九九乘法表的实现。

static void Mu()
{
string t = string.Empty;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
t = string.Format("{0}*{1}={2} ", j, i, (j * i));
Console.Write(t);
//if (j * i < 82)
// Console.Write(" ");
if (i == j)
Console.Write("\n");
}
}
}

7.

在1~10000的整数中,找出同时符合以下条件的数:a.必须是质数。b.该数字各位数字之和为偶数,如数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。

(1)、质数的理解:质数就是所有比1大的整数中,除了1和它本身外,不再有别的约数。2是一个不是奇数的质数,它既是质数也是偶数,面试者极容易忽略这点。判断数N是否为质数要直接从3开始判断(如果N不是2),首先不能是偶数,然后再判断是否能被3、5、7....整除,直到sqrt(N)止。

(2)、求各位数字之和,可以通过循环取余的办法。

解法待解

8.选择,冒泡,插入排序

解法待解

 

9.

程序设计:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。

思路:1、构造出Cat、Mouse、Master三个类,并能使程序运行。

2、从Mouse和Master中提取抽象。

3、联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。

通过这个例子,可以看出,委托事件的应用是极其面向对象的,或者说很对象化!

 

public delegate void subEventhandler();

public abstract class Fabu
{
public event subEventhandler subEvent;

public virtual void FireHuo()
{
if (subEvent != null)
{
subEvent();
}
}
}

public abstract class Dingyue
{
public Dingyue(Fabu fabu)
{
fabu.subEvent += Fanying;
}

public abstract void Fanying();
}


//事件的发布者,猫,事件的订阅老鼠和主人
public class Cat : Fabu
{
public override void FireHuo()
{
Debug.Log("i am cat ");
base.FireHuo();
}
}

public class Mouse : Dingyue
{
private string name;

public Mouse(string Name, Fabu fabu) : base(fabu)
{
this.name = Name;
}

public override void Fanying()
{
Debug.Log(this.name + "i quick run cat danggers");
}

}

public class Master : Dingyue
{
public Master(Fabu fabu) : base(fabu)
{
}
public override void Fanying()
{
Debug.Log("i hate the mouse");
}
}

public class demo3 : MonoBehaviour
{
private void Start()
{
Cat tom = new Cat();
Master a = new Master(tom);
Mouse b = new Mouse("jerry", tom);
tom.FireHuo();
}
}

10.

5.A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:

(1)A参加时,B也参加;

(2)B和C只有一个人参加;

(3)C和D或者都参加,或者都不参加;

(4)D和E中至少有一个人参加;

(5)如果E参加,那么A和D也都参加。

 

public void Print()
    {
        char[] name = { A, B, C, D, E };
        int[] value = new int[5];

        for (value[0] = 0; value[0] < 2; value[0]++)
            for (value[1] = 0; value[1] < 2; value[1]++)
                for (value[2] = 0; value[2] < 2; value[2]++)
                    for (value[3] = 0; value[3] < 2; value[3]++)
                        for (value[4] = 0; value[4] < 2; value[4]++)
                        {
                            if ((value[1] >= value[0]) && (value[1] + value[2] == 1) && (value[2] == value[3]) && (value[3] + value[4] >



= 1) && (value[4] == 0 || value[4] == 1 && value[0] == 1 && value[3] == 1)) { for (int i = 0; i < 5; i++) { if (value[i] == 1) { Debug.Log("{0}参加" + name[i]); } else { Debug.Log("{0}不参加" + name[i]); } } } } }

 

6.用户在文本框中输入一个整数值。不使用库中的BUIT,将数值字符串转换为整数表示。

不会了。

static int StringTolnt(string s)
{
int sum = 0;
for (int i = 0; i < s.Length; i++)
sum = sum * 10 + (s[i] - ‘0‘);
return sum;
}

7.

1.产生20个不同的两位整数的随机数,并且对它们进行由小到大的排序。特别提醒:程序要自动生成20个不同的整数,而且这些整数必须是两位的,如:3不是两位整数,58是两位整数。

        int N = 20;

        List<int> l = new List<int>(N);
        for (int i = 0; i < N;)
        {
            int a = Random.Range(10, 34);
            if (!l.Contains(a))
            {
                l.Add(a);
                ++i
                }
        }
        l.Sort();
        foreach (int a in l)
        {
            Debug.Log(a);
        }

        Debug.Log(l.Count);

8.不允许使用循环语句、条件语句,在控制台中打印出1-200这200个数。

199%200 =199;有点意思啊

(表达式1)&&(表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”

 

(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”

private static bool Print(int number)
{
Console.WriteLine(number);
return number >= 200 || Print(number + 1);
}

9.有5个Aspx页面,分别为"Page_1.aspx","Page_10.aspx","Page_100.aspx","Page_11.aspx","Page_111.aspx",请编写代码,让5个Aspx页面按下面的顺序输出:

private static void Order()
{
var pageList = new[] { "Page_1.aspx", "Page_10.aspx", "Page_100.aspx", "Page_11.aspx", "Page_111.aspx" };
pageList = pageList.OrderBy(s => int.Parse(Regex.Match(s, @"\d+").Value)).ToArray();
Array.ForEach(pageList,Console.WriteLine);
}

 

10.

给定一个字符串,试编写代码,实现重复N倍输出字符串的功能。

这个题目要注意的是char在C#中占用的是两个字节。

11.

给定一个整形数组,请用16进制的方式显示数组的值。

比方:一个short类型数组:[255,255,255],输出的结果为 00FF 00FF 00FF,如果是byte类型,则输出为 FF FF FF

private static void DisplayArrayValues(Array arr)
        {
            int elementLength = Buffer.ByteLength(arr) / arr.Length;
            string formatString = String.Format("{{0:X{0}}} ", 2 * elementLength);
            for (int ctr = 0; ctr < arr.Length; ctr++)
                Console.Write(formatString, arr.GetValue(ctr));
            Console.WriteLine();
        }

12.请自行实现一个函数,该函数的功能是将用户输入的numeric string 转换为integer。

private static int StringToInt(string str)
        {
            int result = 0;
            if (Regex.IsMatch(str, @"^-?[0-9]\d*"))
            {
                bool isNegative = false;
                if (str.IndexOf(-) != -1)
                {
                    str = str.Substring(1);
                    isNegative = true;
                }
                for (int i = 0; i < str.Length; i++)
                {
                    result = result * 10 + (str[i] - 0);
                }
                result = isNegative ? result * -1 : result;
            }
            return result;
        }

13:给定一个整数num,判断这个整数是否是2的N次方。

private static bool GetFlag(int num)
{
if (num < 1) return false;
return (num & num - 1) == 0;
}

14.

试编写一副52张扑克牌的洗牌算法。

提示:每次洗牌的时候,给牌一个随机因子。

private static void Shuffle()
{
var random = new Random();
var result = new List<string>();
string[] cardType = { "红桃", "黑桃", "方块", "梅花" };
string[] cardValue = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
foreach (string type in cardType)
{
var list = cardValue.Select(value => string.Format("{0}{1}", type, value));
result.AddRange(list);
}
result = (from c in result orderby random.Next(0, 51) descending select c).ToList();
result.ForEach(str => Console.Write("{0},", str));
}

15.

一个牧场目前一共有20头刚出生的羊,母羊、公羊各一半。假如母羊5岁时后每年生一胎(母羊,公羊各一半)。羊活到10岁后死亡。请问20年后这个牧场有多少只羊? 请用C#写出算法。

这个题目原题有点蛋疼,我按我的意思,修改了下题目。

给出参考答案:

假如一胎生一只公羊和一只母羊。

static void Main(string[] args)
        {
            int sheepCount;
            for (int i = 1; i <= 20; i++)
            {
                sheepCount = GetSheepCount(i) - GetDeathSheepCount(i);
                Console.WriteLine(sheepCount);
            }
         }
 private static int GetSheepCount(int year)
        {
            if (year <= 4)
                return 20;
            return GetSheepCount(year - 1) + GetSheepCount(year - 5) - GetDeathSheepCount(year);
        }

        private static int GetDeathSheepCount(int year)
        {
            if (year < 10)
                return 0;
            return GetSheepCount(year - 10);
        }

 

 

 

 

 

 

啃啃算法1

标签:select   man   .so   from   char   tom   组成   master   play   

原文地址:https://www.cnblogs.com/xiaomao21/p/9180424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!