- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++算法与书中的算法不同,这里是分N为奇数和偶数的.doc
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,再在前面补领。
您可能关注的文档
最近下载
- 18J621-3 通风天窗 高清晰版.docx VIP
- 初中数学专题04 绝对值.pdf VIP
- ZZ058 动漫制作赛题 第5套-2024年全国职业院校技能大赛双数年拟设赛项赛题.pdf VIP
- 2023年电梯井道移交单.doc VIP
- (高清版)-B-T 19973.1-2023 医疗保健产品灭菌 微生物学方法 第1部分:产品上微生物总数的确定.pdf VIP
- 初中数学绝对值专题(零点分段法、化简、最值).docx VIP
- 25年新版一上语文写字表生字组词笔顺课课贴6页1练习.doc VIP
- 专题06 巧用零点值妙杀绝对值类压轴题2023-2024学年七年级数学上册重难热点提升精讲与实战训练(人教版)(解析版).docx VIP
- 2025我国新版房颤管理指南(全文).docx VIP
- 专题08 规律探究二(培优)2023-2024学年七年级数学上册重难热点提升精讲与实战训练(人教版)(解析版).docx VIP
原创力文档


文档评论(0)