| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1616 人关注过本帖
标题:[求助]请教C#的两个面试题
只看楼主 加入收藏
laplas
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-2-28
收藏
得分:0 
以下是引用falda7448在2006-3-8 13:40:00的发言:
按照我说的方法算出来是3436

不会有那么多种,我觉得应该比2的7次方,还要少

2006-03-09 15:09
laplas
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-2-28
收藏
得分:0 
阶乘的程序到好编。可是10000的阶乘太大了。
不知道怎么解决了。
2006-03-09 15:15
ytyt654
Rank: 2
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2006-2-13
收藏
得分:0 

在网上看到一个求10000!的c语言代码, 算法正确, 用C#改写一下, 大家一起研究.

程序运行需要等待一小段时间...

private void button2_Click(object sender, System.EventArgs e)
{
// COUNT必须为10的n次幂(0 =< n < 9)
const long COUNT = 10000;

long[] array = new long[COUNT];

// 初始化数组
array[0] = 1;
for (long i = 1; i < COUNT; i++)
{
array[i] = 0;
}

long k = 1; // k 是一个计数器

// 计算COUNT - 1的阶乘保存在数组中
for(long i = 1;i < COUNT; i++)
{
for (long j = 0; j < k; j++)
{
array[j] = array[j] * i;
}

// 进位(不是满十进一, 而是满COUNT进一)
for (long j = 0; j < k; j++)
{
if (array[j] / COUNT >= 1)
{
array[j + 1] += array[j] / COUNT;
array[j] %= COUNT;
if(j == k-1)
{
k++;
break;
}
}
}
}

// 输出计算结果
System.Text.StringBuilder sb = new System.Text.StringBuilder();

// 输出COUNT的倍数
for (long m = k - 1; m >= 0; m--)
{
sb.Append(array[m].ToString());
}

// 补0, 相当于最后乘以COUNT
for (int n = 0; n < Math.Log10(COUNT); n++)
{
sb.Append("0");
}

richTextBox1.Visible = false;
richTextBox1.Text = sb.ToString();
richTextBox1.Visible = true;
}


2006-03-09 16:31
falda7448
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-3-7
收藏
得分:0 

我说的这种不是阶乘的!是排列组合的问题!~~~~
组合数学里面有专门的章节讨论!并有公式可以直接求!~~~~
3436是我手算的!应该不会错!~~


2006-03-10 10:41
ytyt654
Rank: 2
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2006-2-13
收藏
得分:0 
第二个问题可以用图论中的邻接矩阵来求.

2006-03-10 10:46
dazhi_
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-3-10
收藏
得分:0 
不知道阶乘这么写对不对!
int sum=1;
for(int i=1;i<=10000;i++)
{
sum*=i;
}

2006-03-10 10:57
ytyt654
Rank: 2
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2006-2-13
收藏
得分:0 
会溢出的

2006-03-10 10:59
wj2051
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-8-24
收藏
得分:0 
以下是引用ytyt654在2006-3-9 16:31:00的发言:

在网上看到一个求10000!的c语言代码, 算法正确, 用C#改写一下, 大家一起研究.

程序运行需要等待一小段时间...

private void button2_Click(object sender, System.EventArgs e)
{
// COUNT必须为10的n次幂(0 =< n < 9)
const long COUNT = 10000;

long[] array = new long[COUNT];

// 初始化数组
array[0] = 1;
for (long i = 1; i < COUNT; i++)
{
array[i] = 0;
}

long k = 1; // k 是一个计数器

// 计算COUNT - 1的阶乘保存在数组中
for(long i = 1;i < COUNT; i++)
{
for (long j = 0; j < k; j++)
{
array[j] = array[j] * i;
}

// 进位(不是满十进一, 而是满COUNT进一)
for (long j = 0; j < k; j++)
{
if (array[j] / COUNT >= 1)
{
array[j + 1] += array[j] / COUNT;
array[j] %= COUNT;
if(j == k-1)
{
k++;
break;
}
}
}
}

// 输出计算结果
System.Text.StringBuilder sb = new System.Text.StringBuilder();

// 输出COUNT的倍数
for (long m = k - 1; m >= 0; m--)
{
sb.Append(array[m].ToString());
}

// 补0, 相当于最后乘以COUNT
for (int n = 0; n < Math.Log10(COUNT); n++)
{
sb.Append("0");
}

richTextBox1.Visible = false;
richTextBox1.Text = sb.ToString();
richTextBox1.Visible = true;
}


就是不能根据10的n次幂最后补零的方法来解,所以对方要求精确到个位


2006-03-10 11:07
ytyt654
Rank: 2
等 级:新手上路
威 望:4
帖 子:195
专家分:0
注 册:2006-2-13
收藏
得分:0 
没有精确到个位吗?

2006-03-10 11:11
falda7448
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-3-7
收藏
得分:0 

图论没接触!~~~
不知道怎么处理!看楼主选什么方法!


2006-03-10 13:30
快速回复:[求助]请教C#的两个面试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026408 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved