C#练习题及其解析,C#学习。

1.每3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶!

int n = 364;//初始可乐瓶数
int m = 0;//喝掉的瓶数
while (n >= 3)
{
   n = n - 2;
   m = m + 3;
}
m = m + n;
Console.WriteLine("一共可以喝{0}瓶,剩下{1}个空瓶", m, n);
Console.ReadKey();  

2.猜数字游戏,我有一个数,请您猜猜是多少?
//请您输入一个0-50之间的数:20(用户输入数字)
//您猜小了,这个数字比20大:30
//您猜大了,这个数字比30小:25
//恭喜您猜对了,这个数字为:25
用户猜错了就继续猜,猜对了就停止游戏。

Random t = new Random();
            int h = t.Next(0, 100);//随机生成0-100间的任意一个数值
            Console.WriteLine("请输入0-100间的任意一个数值");
            for (int o = 1; o < 9999; o++)
            {
                string m = Console.ReadLine();
                int n = Convert.ToInt32(m);//读取输入的数值
                if (n < h)
                {
                    Console.WriteLine("您猜小了,这个数值{0}比大", m);
                }
                else if (n > h)
                {
                    Console.WriteLine("您猜大了,这个数值比{0}小", m);
                }
                else
                {
                    Console.WriteLine("恭喜您,猜对了;你太流弊了");
                    Console.WriteLine("您一共用了{0}次,再接再厉哦(O_O)",o);
                }
            }
            Console.ReadKey();

3.喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!
什么问题?他研究的问题是蟠桃一共有多少个!
不过,到最后,他还是没能解决这个难题,呵呵^-^
当时的情况是这样的:
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?
用户输入n的值,计算出来他第一天吃的时候桃子是多少个。

 Console.WriteLine("输入天数“n”的值");
            string m = Console.ReadLine();
            int n = Convert.ToInt32(m);
            int num2 = 1;
            for(int num1=1;num1< n;num1++)
            {
                num2 = (num2 + 1) * 2;
            }
            Console.WriteLine("孙悟空第一天拥有的桃子数是:{0}",num2);
            Console.ReadKey();

4.输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

string m = Console.ReadLine();
            string[] str = m.Split(' ');
            int[] n = new int[str.Length];
          for(int i=0; i<n.Length; i++)
            {
                n[i] = Convert.ToInt32(str[i]);
            }
            int min = n[0];
            int mini = 0;
          for(int i=1;i<n.Length;i++)
            {
                if(n[i]<min)
                {
                    min = n[i];
                    mini = i;
                }
            }
            int temp=n[0];
            n[0] = n[mini];
            n[mini] = temp;
            for(int i=0;i<n.Length;i++)
            {
                Console.Write(n[i] + " ");
            }
            Console.ReadKey();

5.有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
输出新的序列。

Console.WriteLine("原数列为{11,22,33,44,55,66,77};请输入X的值:");
            int[] sulie = { 11, 22, 33, 44, 55, 66, 77 };
            int n = Convert.ToInt32( Console.ReadLine());
            Console.WriteLine("新的数列为:");
            int iwei = 7;
            int m1 = 0;
            if (n > 11 && n < 77)
            {
                for (int i = 0; i < iwei; i++)
                {
                    if (n > sulie[i] && n < sulie[i + 1])
                    {
                        m1 = 1;
                        iwei = i + 1;
                    }
                }
            }
             if(n>0&&n<11)
             {
              Console.Write(n);
                for(int i=0;i< iwei;i++)
                {
                  Console.Write(" "+sulie[i]);
                }               
             }
             if(n>77)
             {
                for(int i=0;i< iwei;i++)
                {
                  Console.Write(sulie[i]+" ");
                }
              Console.Write(n);
             }            
            if (m1 == 1)
            {
                for (int i = 0; i < iwei; i++)
                {
                  Console.Write(sulie[i] + " ");
                }
            Console.Write(n + " ");
                for (int i = iwei; i < 7; i++)
                {
                  Console.Write(sulie[i] + " ");
                }
            }
         Console.ReadKey();  

6.如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。

Console.WriteLine("请输入各个老师的工资数(用空格隔开):");
            string gz = Console.ReadLine();
            string[] n = gz.Split(' ');
            int[] m = new int[n.Length];
            int y100 = 0;
            int y50 = 0;
            int y10 = 0;
            int y5 = 0;
            int y2 = 0;
            int y1 = 0;
            for(int i=0;i<n.Length;i++)
            {
                m[i] = Convert.ToInt32(n[i]);
            }
            for(int i=0;i<m.Length;i++)
            {
                    y100 += m[i] / 100;
                    int x1 = m[i] % 100;
                    int x2 = x1 % 50;
                    int x3 = x2 % 10;
                    int x4 = x3 % 5;
                    int x5 = x4 % 2;
                    y50 += x1 / 50;
                    y10 += x2 / 10;
                    y5 += x3 / 5;
                    y2 += x4 / 2;
                    y1 += x5 / 1;
             }
                Console.WriteLine("100元面值的需要准备:" + y100 + "张");
                Console.WriteLine("50元面值的需要准备: " + y50 + "张");
                Console.WriteLine("10元面值的需要准备: " + y10 + "张");
                Console.WriteLine("2元面值的需要准备:  " + y2 + "张");
                Console.WriteLine("1元面值的需要准备:  " + y1 + "张");          
                Console.ReadKey();

7.输入一个字符串,判断其是否是C#的合法标识符。

string str = Console.ReadLine();
            bool tj = true;
            if ((str[0] > 'a' && str[0] < 'z') || (str[0] > 'A' && str[0] < 'Z') || (str[0] == '_') || str[0] == '@')
            {
                
            }
            else
            {
                tj = false;

            }
            for(int i=1;i<str.Length;i++)
            {
                if ((str[0] > 'a' && str[0] < 'z') || (str[0] > 'A' && str[0] < 'Z') || str[0] == '_' || str[0] == '@' || (str[i] > '0' && str[i] < '9'))
                {
                    
                }
                else
                {
                    tj = false;

                }
            }
            if(tj==true)
            {
                Console.WriteLine("该字符是合法字符");
            }
            else
            {
                Console.WriteLine("该字符不是合法字符");
            }
            Console.ReadKey();

8.“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。

 string str = Console.ReadLine();
            bool rude = true;
            int idix = str.Length;
            if (str.Length % 2 == 0)
            {
                for (int i = 0; i < str.Length/2; i++)
                {
                    if (str[i] == str[idix -1- i])
                    {
                    }
                    else
                    {
                        rude = false;
                    }
                }
            }
            if(str.Length % 2 != 0)
            {
                for (int i = 0; i < (str.Length + 1) / 2; i++)
                {
                    if (str[i] == str[idix - 1-i])
                    {
                    }
                    else
                    {
                        rude = false;
                    }
                }

            }
            if(rude==true)
            {
                Console.WriteLine("您输入的单词为\"回文串\"");
            }
            else
            {
                Console.WriteLine("您输入的单词不是\"回文串\"");

            }
            Console.ReadKey();

9.网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。

Console.WriteLine("请输入您的密码:"); 
string mima = Console.ReadLine();
            int m = 0, n = 0, k = 0, f = 0;
            int t = mima.Length;
            if (t >= 8 && t <= 16)
            {
                for (int i = 0; i < mima.Length; i++)
                {
                    if (mima[i] > 'A' && mima[i] < 'Z')
                    {
                        m = 1;
                    }
                    if (mima[i] > 'a' && mima[i] < 'z')
                    {
                        n = 1;
                    }
                    if (mima[i] > '0' && mima[i] < '9')
                    {
                        k = 1;
                    }
                    if (mima[i] == '~' || mima[i] == '|' || mima[i] == '@' || mima[i] == '#' || mima[i] == '$' || mima[i] == '%' || mima[i] == '^')
                    {
                        f = 1;
                    }

                }
            
            if(m+n+k+f>=3)
            {
                Console.WriteLine("您输入的密码很安全");
            }
            else
            {
                Console.WriteLine("您输入的密码需要至少包含大、小写,数字和特殊字符中的三种");
            }
            }
            else
            {
                Console.WriteLine("您输入的密码长度要在8位到16位之间");
            }
            Console.ReadKey();

10.据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了背景下沙某农业园卧薪尝胆潜心修炼,终于练成了绝技,能够毫不休息得以恒定的速度(VR m/s)一直跑。兔子一直想找机会好好得教训一下乌龟,以雪前耻。
最近正值泰课举办50周年校庆,社会各大名流齐聚下沙,兔子也趁此机会向乌龟发起挑战。虽然乌龟深知获胜希望不大,不过迫于舆论压力,只能接受挑战。
比赛是设在一条笔直的道路上,长度为L米,规则很简单,谁先到达终点谁就算获胜。
无奈乌龟自从上次获胜以后,成了名龟,被一些八卦杂志称为“动物界的刘翔”,广告不断,手头也有了不少积蓄。为了能够再赢兔子,乌龟不惜花下血本买了最先进的武器——“"小飞鸽"牌电动车。这辆车在有电的情况下能够以VT1 m/s的速度“飞驰”,可惜电池容量有限,每次充满电最多只能行驶C米的距离,以后就只能用脚来蹬了,乌龟用脚蹬时的速度为VT2 m/s。更过分的是,乌龟竟然在跑道上修建了很多很多(N个)的供电站,供自己给电动车充电。其中,每次充电需要花费T秒钟的时间。当然,乌龟经过一个充电站的时候可以选择去或不去充电。
比赛马上开始了,兔子和带着充满电的电动车的乌龟并列站在起跑线上。你的任务就是写个程序,判断乌龟用最佳的方案进军时,能不能赢了一直以恒定速度奔跑的兔子。 

输入:
  本题目包含多组测试,请处理到文件结束。每个测试包括四行:
第一行是一个整数L代表跑道的总长度
第二行包含三个整数N,C,T,分别表示充电站的个数,电动车冲满电以后能行驶的距离以及每次充电所需要的时间
第三行也是三个整数VR,VT1,VT2,分别表示兔子跑步的速度,乌龟开电动车的速度,乌龟脚蹬电动车的速度
第四行包含了N(N<=100)个整数p1,p2...pn,分别表示各个充电站离跑道起点的距离,其中0<p1<p2<... 其中每个数都在32位整型范围之内。 


输出:
  当乌龟有可能赢的时候输出一行 “What a pity rabbit!"。否则输出一行"Good job,rabbit!";
题目数据保证不会出现乌龟和兔子同时到达的情况。

 Console.WriteLine("请输入跑道的长度\"L\":");
            int l = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入充电站的个数\"N\",电动车充满后的行程\"C\",每次充满电所需时间\"T\"(中间用空格隔开):");
            string nct = Console.ReadLine();
            string[] nct1 = nct.Split(' ');
            int[] NCT = new int[nct1.Length];
            for (int i = 0; i < NCT.Length; i++)
            {
                NCT[i] = Convert.ToInt32(nct1[i]);
            }
            int n = NCT[0], c = NCT[1], t = NCT[2];
            Console.WriteLine("请输入兔子的跑步速度\"VR\",乌龟开车速度\"VT1\",乌龟脚蹬电车的速度\"VT2\"(中间用空格隔开):");
            string rtt = Console.ReadLine();
            string[] rt = rtt.Split(' ');
            int[] rtt1 = new int[rt.Length];
            for (int i = 0; i < rtt1.Length; i++)
            {
                rtt1[i] = Convert.ToInt32(rt[i]);
            }
            int vr = rtt1[0], vt1 = rtt1[1], vt2 = rtt1[2];
            Console.WriteLine("请输入{0}个充电站分别距离起点的距离(中间用空格隔开):", n);
            string juli = Console.ReadLine();
            string[] strn = juli.Split(' ');
            int[] N = new int[strn.Length];
            for (int i = 0; i < strn.Length; i++)
            {
                N[i] = Convert.ToInt32(strn[i]);
            }
            int wugui = 0;
            int tuzi = l / vr;
            int mintime = 0;
            if (c > l)
            {
                wugui = l / vt1;
            }
            else
            {
                if(c>=N[0])
                {
                    wugui=N[0]/vt1;
                }
                else
                {
                    wugui = c / vt1 + (N[0] - c) / vt2;
                }
                for(int i=0;i< n;i++)
                {
                    if(i==n-1)
                    {
                        if (l-N[i]>c)
                        {
                            mintime = wugui + t + c / vt1 + (l - N[i] - c) / vt2;
                            if (wugui + (l - N[i]) / vt2 < mintime)
                            {
                                mintime = wugui + (l - N[i]) / vt2;
                            }
                            wugui = mintime;
                        }
                        else
                        {
                            mintime = wugui + t + (l - N[i]) / vt1;
                            if (wugui + (l - N[i]) / vt2 < mintime)
                            {
                                mintime = wugui + (l - N[i]) / vt2;
                            }
                            wugui = mintime;
                        }

                    }
                    else if (N[i + 1] - N[i] > c)
                    {
                        if (N[i + 1] - N[i] > c)
                        {
                            mintime = wugui + t + c / vt1 + (N[i + 1] - N[i] - c) / vt2;
                            if (wugui + (N[i + 1] - N[i]) / vt2 < mintime)
                            {
                                mintime = wugui + (N[i + 1] - N[i]) / vt2;
                            }
                            wugui = mintime;
                        }
                        else
                        {
                            mintime = wugui + t + (N[i + 1] - N[i]) / vt1;
                            if (wugui + (N[i + 1] - N[i]) / vt2 < mintime)
                            {
                                mintime = wugui + (N[i + 1] - N[i]) / vt2;
                            }
                            wugui = mintime;
                        }
                    }
                }
            }
            if (tuzi < wugui)
            {
                Console.WriteLine("兔子赢了");
            }
            else
            {
                Console.WriteLine("乌龟赢了");
            }
            Console.ReadKey();

11.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。测试数据有多组。

int str = Convert.ToInt32(Console.ReadLine());
            int num;
            int[] f = new int[999];
            for (int k = 1; k < 999; k++)
            {
                for (int i = 2; i < 1000; i++)
                {
                    for (int j = 2; j < 1000; j++)
                    {
                        num = i * j;
                        if (num == str)
                        {
                            f[k] = i;
                            str = j;
                            i = 2;
                            Console.Write(f[k]+"*");
                            break;
                        }
                    }
                }
                if (str <= 5 ||str==7)
                {
                    break;
                }
            }
            Console.Write(str);
            Console.ReadKey(); 

12.输入两个正整数m和n,求其最大公约数和最小公倍数。

 int m, n, temp, a, b;
            Console.WriteLine("请输入第一个数:");
             m = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入第二个数:");
             n = Convert.ToInt32(Console.ReadLine());
            if (m < n)
            {
                temp=m;
                m = n;
                n = temp;
            }
            a = m;
            b = n;
            while (b != 0)
            {
                temp = a % b;
                a = b;
                b = temp;                
            }
            Console.WriteLine("最大公约数是:" + a);
            Console.WriteLine("最小公倍数是:" + m * n / a);
            Console.ReadKey();

13.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

            int n;
            double l = 100;
            double keep = 100;
            double m = 50;
            Console.WriteLine("请输入第n次落地时n的值:");
            n = Convert.ToInt32(Console.ReadLine());
            for (int i = 1;i<= n; i++)
            {
                if (i > 1)
                {
                m = l / 2;
                    l = m;
                keep += m;
                }
                else
                {
                    keep = 100;
                    m = 50;
                }
            }
            Console.WriteLine("第{0}次落地时,共经过{1}米,第{0}次反弹的高度为{2}米。", n, keep,m/2);
            Console.ReadKey(); 

14.题目:求1+2!+3!+...+20!的和?

            int temp, m, n;
            m = 1;
            n = 0;
            for(int j = 0; j <= 20; j++)
            {
                if (j >= 2)
                {
                    for (int i = 2; i <= j; i++)
                    {
                        temp = m * i;
                        m = temp;
                        n += m;
                    }
                    temp = 1;
                }
           }
            Console.WriteLine(n);
            Console.ReadKey();

15.利用递归方法求5!。 f(n)=n*f(n-1)

static int f(int n)
        {
            if (n == 2) return 2;
            return n * f(n - 1);
        }
        static void Main(string[] args)
        {
            int m = f(5);
            Console.WriteLine(m);
            Console.ReadKey(); 
        }

16.编一个程序,输入一个正数,对该数进行四舍五入到个位数的运算。例如,实数12.56经过四舍五入运算,得到结果13;而12.46经过四舍五入运算,得到结果12。

            Console.WriteLine("请输入一个正数“n”:");
            double n = Convert.ToDouble(Console.ReadLine());
            double m = n % 1;
            if (m >= 0.5)
            {
                n = (n - m) + 1;
            }
            else
            {
                n = n - m;
            }
            Console.Write("四舍五入后得到:");
            Console.Write(n);
            Console.ReadKey();

17.有关系式1*1+2*2+3*3+...+k*k<2000,编一个程序,求出满足此关系式的k的最大值。

            int m, n,k;
            m = 1;
            n = 1;
            k = 0;
            for (int i = 1; i < 999; i++)
            {
                m = i * i;
                n += m;
                if (n > 2000)
                {
                    k = i-1;
                    break;
                }
            }
            Console.WriteLine(k);
            Console.ReadKey();

18.编一个程序,解决百钱买百鸡问题。某人有100元钱,要买100只鸡。公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只。问可买到公鸡,母鸡,小鸡各为多少只。把所有的可能性打印出来。

            int gj, mj,xj ;
            gj = 0;
            mj = 0;
            double rmb;
            for(; gj <= 100; gj++)
            {
                for(; mj <= 100; mj++)
                {
                    rmb = 5 * gj + mj * 3 + (100-gj- mj) / 3;
                    if (rmb <= 100)
                    {
                        Console.WriteLine("公鸡{0}只,母鸡{1}只,小鸡{2}只",gj,mj,(100-gj-mj));                       
                    }
                    else
                    {
                        mj = 0;
                        break;
                    }
                }
            }
            Console.ReadKey(); 

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值