c语言,帮忙解释下,谢谢你帮忙

问题已关闭
代为完成的个人任务
提问需要满足:其他人可能遇到相似问题,或问题的解决方法对其他人有所助益。如果通过其他方式解决遇到困难,欢迎提问并说明你的求知过程。
用C语言解答一下,大一新生能看懂的,谢谢?
编程查找“扩展水仙花数”。扩展水仙花数:若一个n位(2&n&10)正整数各位数的n次方之和等于该数,则称之为n位扩展水仙花数。n在程序执行时由键盘输入。 (注意,当n较大时,程序执行会很慢,要注意优化算法)
按时间排序
又有来骗作业的了
然而反正都要对着书看代码为啥不对着书自己写个呢
离题很远 用c#当作业做 花了我一个多小时 - -! 奇葩的试出来的...怎么优化?求指教Console.WriteLine("想要几位数的扩展水仙花数");
int n = Convert.ToInt32(Console.ReadLine());
int s = 0;
for (int m = (int)Math.Pow(10, n-1); m & Math.Pow(10, n); m++)
for (int i = 1; i &= i++)
s += (int)Math.Pow((int)(m % (Math.Pow(10, i)) / (Math.Pow(10, i - 1))), n);
if (s == m)
{ Console.WriteLine("{0}是扩展水仙花数", m); }
Console.ReadKey();
----------------------------------------------------------------------------------------------------------------------------------class Program
static void Main(string[] args)
for (n = 100; n & ; n++)
int i = n.ToString().L
for (int j = 1; j &= j++)
m += (int)Math.Pow((int)(n % (Math.Pow(10, j)) / (Math.Pow(10, j - 1))), i);
if (n == m)
{ Console.WriteLine("{0}是扩展水仙花数", n); }
Console.ReadKey();
求作业的同学们,知道你们现在手头也不宽裕,打个欠条5年以后还吧~
真心觉得在知乎不要提作业这类问题!
行吧,看着各位又打表又C#又Python,来个正经的暴力:#include &stdio.h&
#include &math.h&
#include &stdlib.h&
int cmp(const void *a,const void *b)
return *(int *)b - *(int *)a;
int willTLE(int num)
int numcmp = num;
int digits[10];
int cnt = n;
while (cnt)
digits[--cnt] = num % 10;
num /= 10;
qsort(digits, n, sizeof(int), cmp);
int sum = 0;
for (int i = 0; i & n; ++i)
if (sum & numcmp)
sum += pow(digits[i], n);
if (sum == numcmp)
int main(void)
scanf("%d", &n);
for (int i = pow(10, n - 1); i & pow(10, n); ++i)
if (willTLE(i))
printf("%d\n", i);
printf("finished!");
还有一个经过稍微优化的C++代码(C艹果然还是好点)#include &iostream&
#include &cmath&
using namespace std;
int digits[10];
void simulate(int num, int digitnum, int cnt)
if (cnt == n)
if (num == digitnum)
cout && num && endl;
for (int i = 0; i &= 9; ++i)
simulate(digits[i] + num, digitnum * 10 + i, cnt + 1);
int main()
for (int i = 1; i &= 9; ++i)
digits[i] = pow(i, n);
for (int i = 1; i &= 9; ++i)
simulate(digits[i], i, 1);
cout && "finished!" && endl;
这个比上面纯暴力快多了,但也不是最优解
轮子哥不是我说你,审题呀审题!for (int i = 10; i & 1000; i++)
string n = i.ToString();
if (n.Select(x =& (int)x - (int)'0').Select(x =& Math.Pow((double)x, (double)n.Length)).Sum() == int.Parse(n))
listBox1.Items.Add(n.ToString());
这题N等于9的时候不是一般电脑都能在100s(经更正)左右跑出来吗?。。。(如果算错了时间复杂度请指正)所以比赛的时候哪有那么多算法。。。直接暴力打表。。。
哈哈哈这题太好优化了先暴力求解,然后……#includeint main() {
while (~scanf("%d", &n)) {
if (n == 3)
puts("407");
else if (n == 4)
puts("\n9474");
else if (n == 5)
puts("5\n93084");
else if (n == 6)
puts("548834");
else if (n == 7)
puts("17\n9926315");
else if (n == 8)
puts("593477");
else if (n == 9)
puts("\n\n\n");
return 0;}
你们都跑题了啊喂lz要求的是用c语言回答出现汉字的统统跑题了啊喂【貌似我也跑题了逃
也安利下python
return [i for i in range(10 ** (n - 1), 10 ** n) if i == sum(int(j) ** n for j in str(i))]
这个题百度就有,就别来知乎了。不要问我怎么知道的。我也百度过。
别人打好的表都懒得抄一遍(逃
这个题可以考虑对n的大小分别考虑:n比较小的时候,遍历数字的组合;n比较大的时候,因为总数的大小只取决于几个大数,因此可以排除一些大数组合。根据这个创立一套规则,再去遍历符合规则的组合。
传统的水仙花数是各位数字三次方求和,容易证明这样的数字顶多是个四位数,所以直接遍历就行,作为一般大学的c课程就差不多了。但题主的这个题在n为9的时候也是可能有解,还是普通遍历的话一般电脑10^9跑起来估计要100秒这个数量级,这还是有那么一丢丢难度的。所以肯定要优化,其实我们可以发现一个数字各位数字计算后的和与其顺序没有关系,比如123、132、213、231、312、321都一样,其实只要算一次以后看看结果是不是由1、2、3组成就行,但我们却算了6次。根据此我们可以得到一个方法,就是枚举每种数字有几个,将其计算一遍看结果里的每种数字的个数跟枚举的是否一样,是的话这个结果就是一个所需的答案。此种方法所需要的枚举次数就等于把9个相同的苹果放入10个不同篮子,允许篮子里有多个,允许篮子空着,有几种方法。口算不会算,但我打赌绝对不到1000w,跑一下一秒内应该没问题。
这题我只要价10块
知乎作业帮上线指日可待
出门左转百度知道。不谢。
我的n在这里指的是这个数字,不是长度,你随便改改就可以了。我自己试了一下,数字很大的时候,速度还在可以接受的范围内,所以也不优化了。感谢Intel,感谢微软(逃using System;
using System.Linq;
class Program
public static Main(string[] args)
var sn = Console.ReadLine();
var n = Int.Parse(sn);
if (n.Select(x=&(Int64)x - (Int64)'0').Select(x=&Math.Pow(x,sn.Length).Sum() == n)
Console.WriteLine("Yes!");
已有帐号?
无法登录?
社交帐号登录C语言问题,求大神解决,我是小白,解释下原因,谢谢拉.下列变量定义中合法的是 A) short _a=1-.le-1 ;
B) double b=1+5e2.5 ; C) long do=0xfdaL ;
D) float 2_and=1-e-3 ;"
CB项e后面必须是整型,D项数字不能作为变量名,A错在哪呢,C项变量名字怎么可以用do?
廖小明81yX
A 前面的0应该要写上
C怎么可以用do
C错了 变量名字不能用do
为您推荐:
其他类似问题
扫描下载二维码C语言问题,求大神解决,我是小白,最好解释下原因,谢谢拉。, C语言问题,求大神解决,我是小
C语言问题,求大神解决,我是小白,最好解释下原因,谢谢拉。 以下五条语句中有_______是合法的。if (a=b)x++;
if (a=&b) x++;
if (a-b) x++;
if (a&=b&=c) x++;
if(1) x++;A)1
旦川测沸爻度诧砂超棘
D)4答案:D spdd-19 C语言问题,求大神解决,我是小白,最好解释下原因,谢谢拉。
if (a=b)x++; //合法,旦川测沸爻度诧砂超棘但是逻辑错误
if (a=&b) x++; //不合法应该是 a&=b
if (a-b) x++;//合法,当a-b不等于0时为真
if (a&=b&=c) x++;//合法,但是逻辑有误
if(1) x++;
//合法,死循环
答案是D第1、3、4、5旦川测沸爻度诧砂超棘句是可以算合法的,其中第一句就是我们经常所说的判等写成了赋值,虽然于程序逻辑而言有问题,但确实是合法语句。
第一个是赋值,是在判断b的值,不是判断a,b是否相等,理论上是可以的;第二个是数学表达式,c不是这样表达的;第三,四,五个理论上是可以的。第五个是永真。原来答案是D,那是因为出题的人,心里假设了某个前提,没有写出来,所以他的心里认为D是对的。
因为有四条是合法的啊,if (a-b) x++;
这一句是错的,因为括号里面需要的是一个判断性的语句,而不是一个算式C语言问题,求大神解决,我是小白,解释下原因,谢谢拉。, C语言问题,求大神解决,我是小
C语言问题,求大神解决,我是小白,解释下原因,谢谢拉。 下列变量定义中合法的是 A) short _a=1-.le-1 ;
B) double b=1+5e2.5 ; C) long do=0xfdaL ;
D) float 2_and=1-e-3 ;&
CB项e后面必须是整型,D项数字不能作为变量名,A错在哪呢,C项变量名字怎么可以用do??? spdd-21 C语言问题,求大神解决,我是小白,解释下原因,谢谢拉。
A 前面的0应该要写上
A:不能带点为什么1%2商0余1?谢谢!C语言问题,需要详细解释!谢谢!1%2=1???为什么余数是1啊? 1/2=0.5啊
fqNN46SF71
%是取模运算啊~~~你去问一下小学生吧1除以2看看是不是商0余1
除不尽 所以在整数位没有东西 当除数大于被除数的时候 就是商0 最后还剩还剩下的就是被除数 所以是商0余1
%是取模运算啊~~~你去问一下小学生吧 1除以2看看是不是商0余1
1除以1商1余02除以1商2余04除以2商2余02除以4商0余21除以2商0余1有的时候啊,需要把语文的现实结果与理论结果分开再不明白去买一本英国百科全书
这个计算。。。。。不记得了,你去问问幼儿园的小朋友吧。
%是取模运算。 除法是/:在C语言中,如果被除数和除数都是整数,那么默认的商是整数,所以,在C语言中1/2不会得到0.5,而是0.
为您推荐:
扫描下载二维码

我要回帖

更多关于 谢谢你的帮忙 英文 的文章

 

随机推荐