当前位置:编程学习 > C#/ASP.NET >>

如何用c#做下面的题目

编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。 --------------------编程问答-------------------- 100个数而已,遍历你不会啊... --------------------编程问答-------------------- 题目很有问题,可能吗?
200到300之间的数
积为42
和为12 --------------------编程问答-------------------- 我理解错了,你指的是3个位的数字,积42,和12,当我上面没说,不好意思,还是赶紧给你写个答案吧. --------------------编程问答-------------------- 奇了,要问lz,这个可不可以有 --------------------编程问答--------------------
引用 2 楼 bloodish 的回复:
题目很有问题,可能吗?
200到300之间的数
积为42
和为12

楼主是不是写错了? --------------------编程问答--------------------
引用 3 楼 bloodish 的回复:
我理解错了,你指的是3个位的数字,积42,和12,当我上面没说,不好意思,还是赶紧给你写个答案吧.

语句还真有歧义,明白了,你写我就不写了 --------------------编程问答--------------------
引用 2 楼 bloodish 的回复:
题目很有问题,可能吗?
200到300之间的数
积为42
和为12

人家说“三个数字”...

237...我心算都能算出一个来... --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 airch 的回复:
引用 2 楼 bloodish 的回复:
题目很有问题,可能吗?
200到300之间的数
积为42
和为12

楼主是不是写错了?

237不就是嘛,2*3*7=42,2+3+7=12 --------------------编程问答-------------------- 正数?
和为12,那最大数也就是12了,从0开始到12遍历一下 --------------------编程问答--------------------

 int i = 2;          
            for(int j=0;j<10;j++)
                for (int k = 0; k < 10; k++)
                {
                    if (j + k == 10 && j * k == 21)
                    {
                        Console.WriteLine(i * 100 + j * 10 + k);                    
                    }
                }
--------------------编程问答-------------------- 直接输出237 --------------------编程问答--------------------

          for (int i = 201; i < 300; i++)
            {
                int baiwei = i / 100;//百位
                int shiwei = (i % 100) / 10;//十位
                int gewei = (i % 100) % 10;//个位
                if (baiwei * shiwei * gewei == 42 && (baiwei + shiwei + gewei == 12))
                {
                    Console.WriteLine(i);
                }
            }

测试了一下,有:237和273,嘿嘿。 --------------------编程问答-------------------- 贴个Linq

 Func<int, int> calcMul = n =>
                {
                    var ret = 1;
                    n.ToString().ToList().ForEach(c =>
                        {
                            ret *= int.Parse(c.ToString());
                        });
                    return ret;
                };

            var list = from n in Enumerable.Range(200, 100)
                       where n.ToString().Sum(c=>int.Parse(c.ToString())) == 12
                       && calcMul(n) == 42
                       select n;

            foreach (var n in list)
            {
                Console.WriteLine("Num:{0}", n);
            }
--------------------编程问答-------------------- 应该用聚合函数的,没必要再搞个Func委托,重写一下:
var list = from n in Enumerable.Range(200, 100)
                       where n.ToString().Sum(c=>int.Parse(c.ToString())) == 12
                       && n.ToString().Aggregate(1, (pre, next) => pre * int.Parse(next.ToString())) == 42
                       select n;
--------------------编程问答--------------------       public static void Cacul(int ifrom,int ito)
        {
                 
                for(int i=ifrom;i<ito+1;i++)
                  {
                      int count = Convert.ToInt32(i / Math.Pow(10, ifrom.ToString().Length-1));//获取个位
                      int culm = Convert.ToInt32(i / Math.Pow(10, ifrom.ToString().Length-1));//获取个位
                       for (int j = 1; j < ifrom.ToString().Length; j++)
                       {
                           count += Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j-1)));//获取十位、百位、千位
                           culm = culm * Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j - 1)));
                        }
                    if (count == 12 && culm == 42)
                    {
                        Console.WriteLine(i);
                    }
                    else
                    {
                         count = 0;//和
                         culm = 1;//积
                    }

                  }
                Console.ReadKey();
        }

--------------------编程问答-------------------- 个位欠妥,但是实在找不到好的方法了! --------------------编程问答-------------------- [code=C#][/                for(int i=ifrom;i<ito+1;i++)
                  {
                      int count = Convert.ToInt32(i / Math.Pow(10, ifrom.ToString().Length-1));//获取个位
                      int culm = Convert.ToInt32(i / Math.Pow(10, ifrom.ToString().Length-1));//获取个位
                       for (int j = 1; j < ifrom.ToString().Length; j++)
                       {
                           count += Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j-1)));//获取十位、百位、千位
                           culm = culm * Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j - 1)));
                        }
                    if (count == 12 && culm == 42)
                    {
                        Console.WriteLine(i);
                    }
                  }
                Console.ReadKey();] --------------------编程问答--------------------  int i = 2;          
            for(int j=1;j<10;j++)
                for (int k = 10-j; k < 10; k++)
                {
                    if (j + k == 10 && j * k == 21)
                    {
                        Console.WriteLine(i * 100 + j * 10 + k);                    
                    }
                }
--------------------编程问答-------------------- int i = 2;  
  for(int j=1;j<10;j++)
 
  if ( j * (10-j) == 21)
  {
  Console.WriteLine(i * 100 + j * 10 + (10-j));  
  }
}
  --------------------编程问答-------------------- int i = 2;   
  for(int j=1;j<10;j++)
  
  if ( j * (10-j) == 21)
  {
  Console.WriteLine(i * 100 + j * 10 + (10-j));   
  }
} --------------------编程问答-------------------- 遍历,然后分别取出个十百位求和与积。 --------------------编程问答-------------------- 我用Java写的
package com;

public class Demo {

public static void main(String args []){

  System.out.print("满足条件的有:\n");
  for (int n=200; n <=300; n++)
      {
          int a = n / 100;//百位
          int b = (n % 100) / 10;//十位
          int c = (n % 100) % 10;//个位
          if (a * b * c == 42 && (a + b + c == 12))
          {
           System.out.println(n);
          }
        
      }
   
}

}
--------------------编程问答--------------------
引用 13 楼 pittroll 的回复:
C# code

          for (int i = 201; i < 300; i++)
            {
                int baiwei = i / 100;//百位
                int shiwei = (i % 100) / 10;//十位
                int gewei = (i % 100) ……


正解。 --------------------编程问答-------------------- --------------------编程问答-------------------- 同意13楼 --------------------编程问答-------------------- 先定义一个数I给个初始值200 循环条件I<300 I++ 

用 IF 判断 把循环得到的数放到一个数组里面在算
代码就不写了 自己理解 --------------------编程问答--------------------


num=201;
int num1 = num / 100;//获取百位上的数
int num2 = (num % 100) / 10;//获取十位上的数
int num3 = (num % 100) % 10;//获取个位上的数

--------------------编程问答-------------------- 思路:
一、利用for循环遍历200-300之间的数
二、将循环遍历得到的每一个数的个位、十位、百位分解开来
三、if语句判断
代码如下

//利用for循环遍历

for(int i = 200;i <= 300;i ++)
{
    //将得到的每一个数分解开来
    int gewei = i % 10;  //个位数
    int shiwei = i / 10 % 10;  //百位数
    int baiwei = i / 100;

    //将两个条件声明为bool
    bool con1 = (gewei * shiwei * baiwei == 42);
    bool con2 = (gewei + shiwei + baiwei == 12);
  
    //if语句进行判断
    if(con1 && con2)
   {
        Console.WriteLine(i);
   }
}


祝楼主学业有成 --------------------编程问答-------------------- 神马?!
首先排除200和300
所以百位必为2
将21分解质因数,只有3*7(排除21*1)
答案就只有2个,237,273
汗啊,这还需要穷举遍历神马的吗?
神马都是浮云?! --------------------编程问答--------------------

 List <int> count=new List <int>();
            for (int i = 200; i <= 300; i++)
            {
                int b = i / 100;
                int s = (i - b * 100) / 10;
                int g = i % 100;
                int sum = b + s + g;
                int arr = b * s * g;
                if (sum == 12 && arr == 42)
                {
                    count .Add (i);
                }
            }
            for (int i = 0; i < count.Count; i++)
            {
                Console.WriteLine(count[i].ToString ());
            }
                Console.ReadKey();
--------------------编程问答--------------------
引用 30 楼 aqinshou 的回复:
神马?!
首先排除200和300
所以百位必为2
将21分解质因数,只有3*7(排除21*1)
答案就只有2个,237,273
汗啊,这还需要穷举遍历神马的吗?
神马都是浮云?!


如果42 和12不会变  的确不用遍历 --------------------编程问答-------------------- 同意29楼的 --------------------编程问答--------------------
引用 24 楼 dfhdhq 的回复:
引用 13 楼 pittroll 的回复:
C# code

for (int i = 201; i < 300; i++)
{
int baiwei = i / 100;//百位
int shiwei = (i % 100) / 10;//十位
int gewei = (i % 100) ……


正解。

算得这么累做什么呢,
200-300不用看,肯定全是三位数,直接用取字就行了.
--------------------编程问答--------------------
引用 24 楼 dfhdhq 的回复:
引用 13 楼 pittroll 的回复:
C# code

for (int i = 201; i < 300; i++)
{
int baiwei = i / 100;//百位
int shiwei = (i % 100) / 10;//十位
int gewei = (i % 100) ……


正解。

算得这么累做什么呢,
200-300不用看,肯定全是三位数,直接用取字就行了.
--------------------编程问答--------------------         public static void Cacul(int ifrom,int ito)
        {
                 
                for(int i=ifrom;i<ito+1;i++)
                  {
                      int count = 0;
                      int culm = 1;
                       for (int j = ifrom.ToString().Length; j >0 ; j--)
                       {
                           count += Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j-1)));//获取十位、百位、千位
                           culm = culm * Convert.ToInt32(i % Math.Pow(10, j) / Math.Pow(10, (j - 1)));
                        }
                    if (count == 12 && culm == 42)
                    {
                        Console.WriteLine(i);
                    }

                  }
                Console.ReadKey();
        }
  //完解
  //调用Cacul(100,10000); --------------------编程问答-------------------- 纯进来看看,有没有 更有优化的遍历啊? --------------------编程问答-------------------- --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,