这不是一个功课问题.我只是觉得有人可能知道这个问题的真正解决方案.
2004年我参加了编程竞赛,出现了这个问题:
给定n,找到n!的数字之和.n可以是0到10000.时间限制:1秒.我认为每个测试集最多有100个数字.
我的解决方案非常快,但速度不够快,所以我让它运行一段时间.它构建了一组预先计算的值,我可以在我的代码中使用它.这是一个黑客攻击,但它确实有效.
但有一个人用大约10行代码解决了这个问题,它会立即给出答案.我相信它是某种动态编程,或者来自数论的东西.当时我们16岁,所以它不应该是"火箭科学".
有谁知道他可以使用什么样的算法?
编辑:如果我没有明确提出问题,我很抱歉.正如mquander所说,应该有一个聪明的解决方案,没有bugnum,只有简单的Pascal代码,几个循环,O(n 2)或类似的东西.1秒不再是约束.
我在这里发现,如果n> 5,则9除以阶乘的数字之和.我们还可以找到数字末尾有多少个零.我们可以用吗?
好的,来自俄罗斯的编程竞赛的另一个问题.给定1 <= N <= 2 000 000 000,输出N!mod(N + 1).这有点关系吗?
什么是计算数字总和的最快和最容易阅读的实现?
即给出数字:17463 = 1 + 7 + 4 + 6 + 3 = 21
我正在尝试编写一个Python脚本,找到所有整数(N),其中N的数字之和的某个幂等于N.例如,N = 81符合条件,因为8 + 1 = 9,并且a某个9的幂(即2)= 81.
我选择的范围是任意的.我的脚本有效,但非常非常慢.理想情况下,我想在大约6000ms内找到前30个这样的整数.
我的第一个解答:
def powerOfSum1():
listOfN = []
arange = [a for a in range(11, 1000000)] #range of potential Ns
prange = [a for a in range(2, 6)] # a range for the powers to calculate
for num in arange:
sumOfDigits = sum(map(int, str(num)))
powersOfSum = [sumOfDigits**p for p in prange]
if num in powersOfSum:
listOfN.append(num)
return listOfN
Run Code Online (Sandbox Code Playgroud)
在我的第二个解决方案中,我尝试为每个sumOfDigits存储所有权限,但这并没有提高性能.
def powerOfSum2():
listOfN = []
powers= {}
for num in range(11, 1000000):
sumOfDigits = …
Run Code Online (Sandbox Code Playgroud) 我有一个包含NSDictionary列表的NSArray.喜欢:
NSArray *array = ...;
NSDictionary *item = [array objectAtIndex:0];
NSLog (@"quantity: %@", [item objectForKey: @"quantity"]);
Run Code Online (Sandbox Code Playgroud)
如何汇总阵列所有字典中包含的所有数量?
我想在字符串中找到与给定数字相加的连续数字.
例:
a="23410212"
数字is=5
- 输出23,41,410,0212,212
.
此代码无效.我需要修理什么?
def find_ten_sstrsum():
num1="2825302"
n=0;
total=0;
alist=[];
ten_str="";
nxt=1;
for n in range(len(num1)):
for n1 in range(nxt,len(num1)):
print(total)
if(total==0):
total=int(num1[n])+int(num1[n1])
ten_str=num1[n]+num1[n1]
else:
total+=int(num1[n1])
ten_str+=num1[n1]
if(total==10):
alist.append(ten_str)
ten_str=""
total=0
nxt+=1
break
elif(total<10):
nxt+=1
return alist
Run Code Online (Sandbox Code Playgroud) 我有这段代码:
int[] primes = generatePrimes(bound);
int sum = 0;
for (int i = 0; i < primes.GetLength(0); i++)
{
if (sum < 0)
{
Console.WriteLine(sum);
}
sum += primes[i];
}
Run Code Online (Sandbox Code Playgroud)
我检查过以确保我的数组"primes"只包含正整数,如下所示:
if (primes[i] < 0)
{
Console.WriteLine(primes[i]);
}
Run Code Online (Sandbox Code Playgroud)
但什么都不打印.但是,由于某种原因,总和有时会是负数,并且在我运行第一段代码时会打印出来.数组的长度是148933.我不太了解C#,但我不认为长度在这里应该重要吗?:S
如果有人知道为什么会这样,我会非常感谢任何帮助.
简单的"数字和"代码.它编译但是在执行时,最后一个cout为num int而不是实际的用户输入数字给出"0".
如果您愿意,可以随意将其复制并粘贴到您自己的编译器中,看看我的意思.
如何输出正确的"num"值?
~~~
#include <iostream>
using namespace std;
int main()
{
int num;
int sum = 0;
cout << "Please type any non-negative integer: ";
cin >> num;
while ( num > 0 ) {
sum += num % 10;
num /= 10;
}
cout << "The sum of the digits of " << num << " is " << sum << "\n";
system("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我在其他地方遇到过这段代码.它只是添加给定数字中的所有数字:
def sumDigits(n):
sum = 0
while n > 0:
sum += n % 10
n //= 10
return sum
Run Code Online (Sandbox Code Playgroud)
问题是,我根本没有得到它背后的逻辑.特别是,我没有完全得到循环的作用:
while n > 0:
sum += n % 10 # Why n % 10?
n //= 10 # Again, not sure why we divide the number by 10
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个算法如何工作的例子吗?
谢谢!
我找不到我写的问题.我正在尝试Project Euler#16,我需要将所有数字加起来为2 ^ 1000.我的程序使用较小的数字,但随着数字大约18位左右,它会中断.有帮助吗?
public static double digit(double n){
return n % 10;
}
public static double sumofDigits(double n){
double sum = 0;
while(n > 1){
sum += digit(n);
n = Math.floor(n/10);
}
return sum;
}
public static void main(String[] args) {
double x = Math.pow(2,1000);
double y = 22222222222222222222d;
System.out.println(sumofDigits(x));
System.out.println(sumofDigits(y));
}
Run Code Online (Sandbox Code Playgroud)
}
我怎样才能得到所有n位数字的总和等于给定的总和?我需要最快的解决方案,因为n可以等于9,总和可以等于1000。
我已经在下面实现了解决方案,但是它太慢了...
List<int> l = new List<int>();
void findNDigitNumsUtil(int n, int sum, char[] ou, int index)
{
if (index > n || sum < 0)
return;
if (index == n)
{
if (sum == 0)
{
ou[index] = '\0';
string s = new string(ou);
l.Add(Int32.Parse(s));
}
return;
}
for (int i = 0; i <= 9; i++)
{
ou[index] = (char)(i + '0');
findNDigitNumsUtil(n, sum - i, ou,
index + 1);
}
}
void findNDigitNums(int n, int sum)
{
char[] …
Run Code Online (Sandbox Code Playgroud) 我知道这个问题很多次,但我在我的代码中遇到了不同的问题,我尝试计算2-15之间的长整数范围.
码:
long array[20];
long NUMBERS;
cout << "How many numbers ? : ";
cin >> NUMBERS;
long sum=0;
for (int i = 0; i < NUMBERS;i++){
cout << "Input number " << (i+1) << " : ";
cin >> array[i];
}
cout << "Calculate Sum" << endl;
for (int i = 0; i < NUMBERS;i++){
sum = sum + array[i];
}
cout << "Sum is : " << sum << endl;
Run Code Online (Sandbox Code Playgroud)
当我输入这三个数字时.
输出:
总和是:1370368
但实际答案是:3703627.
我尝试这些解决方案 …
sum-of-digits ×11
algorithm ×4
c# ×3
python ×3
arrays ×2
c++ ×2
performance ×2
java ×1
list ×1
nsarray ×1
objective-c ×1