算法作业

这个博客包含一系列编程挑战,涉及折扣计算、同构数查找、货币兑换、数字操作和约瑟夫斯问题。使用switch语句解决购物打折算法,并通过循环和条件判断解决其他问题,例如找到10000以内的所有同构数,计算特定数值的和,以及确定约瑟夫斯问题的获胜者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

、某百货公司为了促销,采用购物打折的办法。
(1) 在1000元以上者,按九五折优惠;
(2) 在2000元以上者,按九折优惠;
(3) 在3000元以上者,按八五折优惠;
(4) 在5000元以上者,按八折优惠。
编写程序,输入购物款数,计算并输出优惠价。(要求用switch语句编写)


2、同构数”是指这样的整数:它恰好出现在其平方数的右端。如:376*376=141376。请找出10000以内的全部“同构数”。


3、将一张一元纸币兑换成一分、二分和五分的硬币,假定每种至少一枚,计算共有多少种兑换法并打印出各种兑换法。


4、键盘输入正整数n,求出n 与其反序数x 之和并输出。例如,输入2038,输出应为:
n + x = 2038 + 8302 = 10340。


5、编写程序,计算s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。


6、josephus问题,一群孩子围成一圈,任意假定一个数m从第一个小孩起顺时针方向数,每数到第m个小孩时,该小孩离开。小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是获胜者。究竟获胜的是第几个小孩。


 

参考答案:(采用的是穷举法 )

1:

        public void Swith_Example()
        {
            Console.WriteLine("请输入购物款数:/n");
            int money = Convert.ToInt32(Console.ReadLine());

            switch (money/1000)
            {
                case 1:
                    money = Convert.ToInt32(money * 0.95);
                    break;
                case 2:
                    money = Convert.ToInt32(money * 0.9);
                    break;
                case 3:
                    money = Convert.ToInt32(money * 0.85);
                    break;
                case 4:
                    money = Convert.ToInt32(money * 0.8);
                    break;
                default:
                    break;
            }

            Console.WriteLine("优惠价后的价格为" + money.ToString());
        }

2:

        public static void Print()
        {
            int temp;
            for (int i = 1; i < 10000; i++)
            {
                temp = i*i;
                if (i < 10 && i  == i * i % 10)
                    Console.WriteLine(i);
                if(i<100 && i ==i*i%100)
                    Console.WriteLine(i);
                if(i<1000 && i ==i*i%1000)
                    Console.WriteLine(i);
                else if(i==i*i%10000)
                    Console.WriteLine(i);
            }
        }

3:
        public static void Print()
        {
            for(int i=1;i<20;i++)
                for (int j = 1; j < 50; j++)
                    for (int k = 1; k < 100; k++)
                    {
                        if (i * 5 + j * 2 + k == 100)
                            Console.WriteLine("五分:{0},二分:{1},一分:{2}", i, j, k);
                    }
        }

4:
        public void NumSum()
        {
            Console.Write("请输入一个正整数:");
            string str = Console.ReadLine();

            string str2 = "";
            for (int i = 0; i < str.Length; i++)
            {
                str2 = str[i] + str2;
            }

            Console.WriteLine("反序数是:" + str2);
            Console.WriteLine("原数和反序数之和为:" + (Convert.ToInt32(str2) + Convert.ToInt32(str)));
        }

5:
        public static int Sum(int n)
        {
            int sum = 0;
            int temp=0;
            for (int i = 1; i <= n; i++)
            {
                for(int j=1;j<=i;j++)
                {
                    temp=temp+j;
                }
                sum += temp;
                temp = 0;
            }
            return sum;
        }

6:

        public static int GetJosephus(int interval, int childCount)
        {
            int[] child = new int[childCount];
            //给孩子编号
            for (int i = 0; i < childCount; i++)
            {
                child[i] = i+1;
            }
            int j = -1 ;
            int k = 1;
            while (true)
            {
                for (int i = 0; i < interval; )
                {
                    j = (j + 1) % childCount;
                    if (child[j] != 0)
                    {
                        i++;
                    }

                }
                if (k == childCount)
                    break;
                child[j] = 0;
                k++;
            }
            return j;
        }


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值