实验名称:实验九 枚举问题(运算模拟)
实验目的:熟练掌握一些枚举问题的处理方法。
实验内容:
- 问题描述:(乘积为n个1的数字游戏)两位计算机爱好者在进行“积为n个1的数字游戏”,其中一位给定一个正整数p(约定整数p为个位数字不是5的奇数),另一位寻求正整数q,使得p与q之积为全是1组成的整数。
输入:第1行是测试数据的组数t,每组测试数据占1行,每行包括一个个位数字不是5的奇数p。
输出:对应每组测试数据输出共t行,每行输出两个整数,之间有一个空格分隔,一个是满足条件的整数q,另一个是p与q之积的1的个数。
输入样例
3
11
9
89
输出样例
1 2
12345679 9
124843945068664169787765293383270911360799 44
- 问题描述:(被除数的连写数)从1开始按正整数的顺序连续写下去所构成的整数称为连写数,要使连写数12345678901112...m(连写到m)能被给定整数p(p<1000)整除,m至少为多大?
输入:输入只有一行,为一个正整整p(p<1000)。
输出:输出为一行,包括两个整数,一个是商,另一个是整数连写数的最后一个数m,二者之间用空格分隔。
输入样例
13
输出样例
94966760847 11
- 问题描述:(阶乘中找数)统计n阶乘中数字p的个数。
输入:输入只有一行,为两个正整整n、p(n≤800,0≤p≤9)。
输出:输出为两行,一行为n!,另一行为n!中数字p的个数。
输入样例
10 8
输出样例
3628800
2
- 问题描述:(尾数前移问题)整数n的尾数是q,把尾数q移到其前面(成为最高位)后所得的数为原来整数n的p倍,原整数n为多少?
输入:输入只有一行,为两个正整数q、p(2≤p≤q≤9)。
输出:输出为一行,即为所求n。
输入样例
8 4
输出样例
205128
实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):
1.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,p,c,n,t,f; scanf("%d",&t); while(t--) { scanf("%d",&p); c=0;n=0; f=1; while(c!=0||f!=0) { a=c*10+1; c=a%p; b=a/p; n++; if(f==1&&b==0)continue; printf("%d",b); f=0; } printf(" %d\n",n); } } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
2.
(Ⅰ)程序代码及注释
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char buff[10]; int a,b,p,c,len,m,k,f; scanf("%d",&p); c=1;m=1; f=0; while(c!=0) { m++; sprintf(buff,"%d",m); len=strlen(buff); k=0; while(k<len) { a=c*10+buff[k]-'0'; k++; c=a%p; b=a/p; if(f==0&&b==0)continue; f=1; printf("%d",b); } } printf(" %d\n",m); } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
3.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int n,p,a,m,i,j,k,w[2000],s; scanf("%d%d",&n,&p); w[0]=1;k=0; for(i=1;i<=n;i++) { m=0; for(j=0;j<=k;j++) { a=w[j]*i+m; w[j]=a%10; m=a/10; } while(m>0) { k++; w[k]=m%10; m=m/10; } } for(s=0,i=k;i>=0;i--) { printf("%d",w[i]); if(w[i]==p)s++; } printf("\n%d\n",s); } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
4.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int a,m,j,k,p,q,w[100]; scanf("%d%d",&q,&p); w[1]=q;m=0;k=1;a=p*q; while(a!=q) { a=w[k]*p+m; k++; w[k]=a%10; m=a/10; } for(j=k-1;j>=1;j--) printf("%d",w[j]); printf("\n"); } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析