大学acm实习报告之一

1.3【问题描述】  

我们要求找出具有下列性质数的个数(包含输入的自然数n)。先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理;  2.在它的左边加上一个自然数,但该自然数不能超过原数最高位数字的一半; 3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.

【输入】  第一行一个数t,表示有t组数据 之后每组数据占一行,每行一个数n  

【输出】  每组数据占一行,一个数,表示满足条件的数的个数  

【输入范例】1 6  

【输出范例】6

2.需求分析

本演示程序用VC++6.0编写,完成对自然数的扩展。

先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理;

2.在它的左边加上一个自然数,但该自然数不能超过原数最高位数字的一半; 3. 加上数后

继续按此规则进行处理,直到不能再加自然数为止.

【输入】  第一行一个数t,表示有t组数据 之后每组数据占一行,每行一个数n  

【输出】  每组数据占一行,一个数,表示满足条件的数的个数  

【输入范例】1 6  

【输出范例】6

3.概要设计

1)为了实现上述程序功能,需要定义数组来接收输入的t组数据的具体数据:

#include<stdio.h>

void shu()

{

int t,i,n,m;                       //m用来接收最高位数字,n是满足条件的数的数字

int s[1000];                      //接收输入的数据

// printf("请输入数据组数t:");

scanf("%d",&t);

// printf("请输入t个具体数据:");

for(i=0;i<t;i++){

scanf("%d",&s[i]);

m=s[i];

2)本程序包含2个函数:
①计算满足条件的个数函数 shu()

 主函数main()

 各函数间关系如下:
main()              shu()

4.详细设计

1)题目中输入的是自然数,且n<=100,使用int 实现就可以了。

2)在稿纸上算出最高位数为1-9满足条件的数的个数。(11),(22),(32),(44),(54),(66),(76),(810),(910)。

#include<stdio.h>

void shu()

{

int t,i,n,m;                       //m用来接收最高位数字,n是满足条件的数的数字

int s[1000];                      //接收输入的数据

// printf("请输入数据组数t:");

scanf("%d",&t);

// printf("请输入t个具体数据:");

for(i=0;i<t;i++){

scanf("%d",&s[i]);

m=s[i];

if(m<0||m>1000)printf("输入的数据超出范围!\n");//根据题目要求的范围

else {

if(m==0)n=m;

while(m>=10)m=m/10;//求出输入的自然数的最高位

if(m==1)n=1;         

if(m==2||m==3)n=2;

if(m==4||m==5)n=4;

if(m==6||m==7)n=6;

if(m==8||m==9)n=10;

printf("%d\n",n);//(由于最高位数数字在1-9之间,只要满足条件就输出相应结果)

}   

}

}

void main()

{

 shu();

}
5.调试分析
#include<stdio.h>

void shu()

{

int t,i,n,m;

int s[1000];                     

scanf("%d",&t);

for(i=0;i<t;i++){                   

scanf("%d",&s[i]);

m=s[i];

if(m<0||m>1000)printf("输入的数据超出范围!\n");

else {

if(m==0)n=m;

while(m>=10)m=m/10;

if(m==1)n=1;

if(m==2||m==3)n=2;

if(m==4||m==5)n=4;

if(m==6||m==7)n=6;

if(m==8||m==9)n=10;

printf("%d\n",n);

}   

}                   //时间复杂度T(n)=O(n),空间复杂度S(n)=O(1)

}

void main()

{

 shu();

}

调试时,先进入main()函数,再调用shu()函数,定义形参,申请数组空间,输入t值,空格,再输入t个数据,接下来就对各个数据进行判断输出。

6.使用说明

程序名为1.exe,运行环境为VC++6.0。程序执行后显示


依次输入组数tt个数据,每输入一个数就用空格间隔再输入下一个数,最后输入换行字符即输出结果。

7.测试结果

1

输入1 6: 1组数据和1个数据的具体数据 6

输出:6

2

输入2 16 58: 2组数据和2个数据的具体数据 16 58

输出:1 4

3

输入1 -9: 1组数据和1个数据的具体数据 -9

输出:输入的数据超出范围!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值