- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++算法:与书中的算法不同,这里是分N为奇数和偶数的两种情况,当N为偶数时,T=N/2,为奇数时T=N+1通过用T来控制循环
流程图画的是书中的算法,他不管N为奇数偶数的情况,都用N/2来控制循环,但当N为奇数时对其特别处理中间元素;
点击按扭的函数:
void CJuzhenDlg::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData();
m_output=;//输出完成后对m_output清空
int i,j,k=0,t,n;
CString str;
int a[100][100];
n=m_input;
if(n%2==0)//当N为偶数时
t=n/2;
else //当N为奇数时
t=n/2+1;
for(i=0;it;i++)
{
for(j=i;jn-i;j++)//左侧
{
k++;
a[j][i]=k;
}
for(j=i+1;jn-i;j++)//下文
{
k++;
a[n-1-i][j]=k;
}
for(j=n-2-i;j=i;j--)//右侧
{
k++;
a[j][n-1-i]=k;
}
for(j=n-2-i;ji;j--)//上方
{
k++;
a[i][j]=k;
}
}
//另一种输出算法:
定义一个字符串变量str
将a[i][j]用Format函数转换为字符串类型并付值给str,
然后用m_output+=str输出
优点:代码简单,空间效率高.
缺点:无法对齐格式化输出
for(i=0;in;i++) {
for(j=0;jn;j++)
{
str.Format(%d,a[i][j]; //将a[i][j]转换成字符型输出
m_output+=str+ ;
}
m_output+=\r\n;
}
UpdateData(false);
}
void CJuzhenDlg::OnOK() //确定键
{
// TODO: Add extra validation here
CDialog::OnOK();
}
流程图说明:第二个流程图画的是我们组的交给老师的那种输出算法的流程图,他利用定义一个字符数组b[10]={0,1,2,3,4,5,6,7,8,9};通过这个数组来控制输出,感觉有点像Fomat函数的翻译,虽然有些麻烦但是他可以控制字符的位数,逐个从高位到低位输出,记录试验要输出的最高位,然后没有达到最高位数的对其补空格,从而实现了对齐问题;代码虽然有些繁琐,但输出的很完美;
工作流程: 1,输入n,赋值k=1,通过对k++来实现对数组中数的记录
2,i,j控制数组的行或列
3,i列,从i行到n-i行对矩阵左侧赋值a[j][i]=k,k++
4,n+1-i行,从i列到n-i列对矩阵下文赋值a[n+1-i][j]=k,k++
5,n+1-i列,从n+1-i行到i+1行对矩阵右侧赋值a[j][n+1-i]=k,k++
6,i行,从n+1-i列到i+1列对矩阵上方赋值a[i][j]=k,k++
7, 当n为奇数时对它特别处理,使矩阵中间的元素a[i][i]=n*n;
8, n个数后输出换行,然后用二层遁环打印a[i][j];
试验一算法理解:用10*10的二维数组A(行和列下标都为0——9)作为计数器,i行和j列存储数据正好对应数字对(i,j)出现的次数,当有对应的(i,j)的数对出现时相应的计数器加1。这样的存储方式使算法变的非常简单而且大大提高了算法效率;最后对数组进行输出;
试验二算法理解:乘法的结果是按由低位到高位存储在数组a中,由于计算结果位数可能很多,若存储结果的数组每个存储空间只存储一位数字,对每一位进行累乘的次数太多。
所以将数组定义为长整型。每个元素存储结果的6位数字;
在程序中用m=log(n)*n/6+2是来粗略估计n!的位数;接下来用两重循环实现高精度数据按元素与自然数相乘,其中i代表要累乘得数据,j代表当前累乘结果的数组下标,数组b存储计算的中间结果,d存储超过6位后的进位,数组a存储每次累乘的结果,每个元素存储6位数据.
接下来的一个循环是为了输出结果,由于结果可能会非常长,所以采用以下方法:先找到第一个6位数不全为0的数,记录下该数的下标记为r,然后先输出a[r],不是最高位的数据需要补零。如计算结果为45555000333,则a[2]=45555,a[1]=000333,对于a[2]用a[r]输出,a[1]先输出333,再在前面补领。
您可能关注的文档
最近下载
- 人工智能教学课件.ppt VIP
- 公司与员工签订车辆使用协议(2024两篇) .pdf VIP
- 小森LS-40印刷机保养操作指导07.pdf VIP
- 2024-2025学年深圳市育才三中小升初入学分班考试语文试卷附答案解析.pdf VIP
- 咖啡瑞幸咖啡美国上市招股说明书中文全译版本.pdf
- 2023年深圳市南山区育才三中小升初分班考试数学模拟试卷及答案解析.pdf VIP
- 涵管埋设施工技术方案.docx VIP
- 2018-2019、2021-2022年重庆邮电大学《808数字电路与逻辑设计》历年硕士真题汇总.pdf VIP
- 初中化学装置气密性的检验.pptx VIP
- 原理1-经济学概述.ppt VIP
文档评论(0)