16.一张单据上有一个5位数的号码为6**42,其中百位数和千位数已模糊不清,但知道该数能被 57 和 67 除尽。设计一个算法,找出该单据所有可能的号码。
17.编程序求2~10000以内的完全数。一个数的因子(除了这个数本身)之和等于该数本身。
18.找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt以及这些I之和sum,请编写函数countValue()实现程序要求。
19.将大于整数m且小于n的k个素数存入数组x。请编写函数num()实现程序的要求.
20.选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CN以及这些素数值的和SUM。请编写函数实现程序要求.
16、我们可以看到是百位和千位不清楚是多少,我们可以从01-99来进行猜测,代码如下:
for (int i = 1; i <= 99; i++)
{
int number = 60000 + 6 * i + 42; // 构建六位数,形式为60000 + 6 * (01-99) + 42
if (IsValidNumber(number))
{
Console.WriteLine($"有效的单据号码是: {number}");
break; // 找到一个有效的单据号码后就停止循环
}
}
}
static bool IsValidNumber(int number)
{
// 这里可以添加更多的校验逻辑,例如检查百位和千位的模糊条件
// 例如,检查百位和千位的和或乘积符合某种模式
int hundredth = number / 100 % 10;
int thousandth = number / 1000 % 10;
// 假设模糊条件是百位和千位数字之和为5
if (hundredth + thousandth == 5)
{
return true;
}
return false;
}
17、外层循环遍历2到10000的所有整数,内层循环遍历这个数的所有因子,如果一个数的因子之和等于这个数本身,那么这个数就是完全数,输出它。代码如下:
for (int number = 2; number <= 10000; number++)
{
int sum = 0;
for (int i = 1; i < number; i++)
{
if (number % i == 0)
{
sum += i;
}
}
if (sum == number)
{
Console.WriteLine(number);
}
}
18、判断素数,以及加上指定的数还是素数,我们可以根据以下步骤来进行:
-
定义素数判断函数:首先,需要定义一个判断素数的函数。素数是指只能被1和自身整除的大于1的自然数。
-
遍历并判断:在1到100的范围内遍历每个数,使用素数判断函数检查该数及其加4和加10后的结果是否都是素数。如果是,则计数器加1,并将该数加入到结果集中。
-
输出结果:最后输出满足条件的整数个数。代码如下:
int count = 0; // 计数器
int sum = 0; // 满足条件的整数之和
for (int i = 2; i <= 100; i++) // 从2开始到100遍历每个数
{
if (countValue(i) && countValue(i + 4) && countValue(i + 10)) // 检查I、I+4、I+10是否都是素数
{
count++; // 计数器加1
sum += i; // 将满足条件的整数加入到和中
}
}
Console.WriteLine($"满足条件的整数的个数={count}"); // 输出满足条件的整数个数
Console.WriteLine($"满足条件的整数的和值={sum}"); // 输出满足条件的整数之和
}
// 判断一个数是否为素数的函数
static bool countValue(int number)
{
if (number <= 1) return false; // 小于等于1的数不是素数
for (int i = 2; i * i <= number; i++) // 只需检查到平方根即可提高效率
{
if (number % i == 0) return false; // 如果能被其他数整除,则不是素数
}
return true; // 不能被整除,则是素数
}
19、代码如下,根据素数来进行判断:
Console.WriteLine("请输入对应的m,n,k的值");
int m = int.Parse(Console.ReadLine());
int n = int.Parse(Console.ReadLine());
int k = int.Parse(Console.ReadLine());
List<int> res = num(m, n, k);
Console.WriteLine("结果是:"+res);
}
// 判断一个数是否为素数的函数
public static List<int> num(int m, int n, int k)
{
List<int> primes = new List<int>();
for (int i = m; i < n && primes.Count < k; i++)
{
if (IsPrime(i))
{
primes.Add(i);
}
}
return primes;
}
private static bool IsPrime(int number)
{
if (number <= 1)
{
return false;
}
if (number <= 3)
{
return true;
}
if (number % 2 == 0 || number % 3 == 0)
{
return false;
}
for (int i = 5; i * i <= number; i += 6)
{
if (number % i == 0 || number % (i + 2) == 0)
{
return false;
}
}
return true;
}
20、这个问题可以通过三层循环解决,外层循环控制100到1000的数字,中间层循环控制个位数字,最内层循环控制十位数字,代码如下
int count = 0;
int num = 0;
for (int i = 100; i <= 1000; i++)
{
int ones = i % 10; //个位数字
int tens = i / 10 % 10; //十位数字
int hundreds = i / 100; //百位数字
if ((ones + tens) % 10 == hundreds)
{
Console.WriteLine(i);
count++;
num += i;
Console.WriteLine("个数CN是:"+count);
Console.WriteLine("和sum是:"+num);
}
}