程序专题实验报告.docx
《程序专题实验报告.docx》由会员分享,可在线阅读,更多相关《程序专题实验报告.docx(34页珍藏版)》请在冰豆网上搜索。
![程序专题实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/28/3b6c7291-e6fd-4e35-afae-fcee4e73a852/3b6c7291-e6fd-4e35-afae-fcee4e73a8521.gif)
程序专题实验报告
程序设计专题实验指导书
信息工程学院计算机系
/*实验一简单计算问题
1、数字求和
问题描述
给定一个正整数a,以及另外的5个正整数,问题是:
这5个整数中,小于a的整数的和是多少?
输入形式
输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
输出形式
输出一行,给出一个正整数,是5个数中小于a的数的和。
样例输入
10123411
样例输出
10*/
/*2、两倍数
问题描述
给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:
数对中一个数是另一个数的两倍。
比如给定1432971822,得到的答案是3,因为2是1的两倍,4是2的两倍,18是9的两倍。
输入形式
输入包括多组测试数据。
每组数据包括一行,给出2到15个两两不同且小于100的正整数。
每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。
输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。
输出形式
对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。
样例输入
14329718220
248100
751113130
-1
样例输出
3
2
0*/
/*3、NumberSequence
问题描述
Anumbersequenceisdefinedasfollows:
f
(1)=1,f
(2)=1,f(n)=(A*f(n-1)+B*f(n-2))mod7.
GivenA,B,andn,youaretocalculatethevalueoff(n).
输入形式
Theinputconsistsofmultipletestcases.Eachtestcasecontains3integersA,Bandnonasingleline(1<=A,B<=1000,1<=n<=100,000,000).Threezerossignaltheendofinputandthistestcaseisnottobeprocessed.
输出形式
Foreachtestcase,printthevalueoff(n)onasingleline.
样例输入
113
1210
000
样例输出
2
5*/
#include
intfun(intx,inta,intb)
{
if(x==1||x==2)
return
(1);
else
{
intte=(fun(x-1,a,b)*a+fun(x-2,a,b)*b)%7;
return(te);
}
}
intmain()
{
intt;
inta,b,x;
scanf("%d%d%d",&a,&b,&x);
while(a!
=0&&b!
=0&&x!
=0)
{
t=fun(x,a,b);
printf("%d\n",t);
scanf("%d%d%d",&a,&b,&x);
}
return0;
}
4、肿瘤检测
问题描述
一张CT扫描的灰度图像可以用一个N*N(0我们假设给定的图像中有且只有一个肿瘤。
在图上监测肿瘤的方法如下:
如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。
我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。
任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。
肿瘤的边界点的个数称为肿瘤的周长。
现在给定一个图像,要求计算其中的肿瘤的面积和周长。
输入形式
输入第一行包含一个正整数N(0图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。
输出形式
输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。
样例输入
6
999999999999
999999509999
999949495051
995020255299
405099999999
999999999999
样例输出
98
测试数据2:
样例输入
7
99999999999965
99999950999925
99994949504934
99502025529938
40509999999935
99999999999955
99999999999977
样例输出
1413
#include
intmain()
{
inta[200][200];
intn;
scanf("%d",&n);
inti,j,size=0,circle=0;
for(i=0;i{
for(j=0;jscanf("%2d",&a[i][j]);
}
for(i=0;i{
for(j=0;jif(a[i][j]<=50)
{
size=size+1;
if(i==0||i==n-1||j==0||j==n-1)
circle++;
elseif(a[i-1][j]>50||a[i+1][j]>50||a[i][j+1]>50||a[i][j-1]>50)
circle++;
}
}
printf("%d%d",size,circle);
return0;
}
5、填词
问题描述
Alex喜欢填词游戏。
填词是游戏是一个非常简单的游戏。
填词游戏包括一个N*M大小的矩形方格盘和P个单词。
玩家需要把每个方格中填上一个字母使得每个单词都能在方格盘上找到。
每个单词都能找到要满足下面的条件:
每个方格都不能同时属于超过一个的单词。
一个长为k的单词一定要占据k个方格。
单词在方格盘中出现的方向只能是竖直的或者水平的。
你的任务是首先在方格盘上找到所有的单词,当然在棋盘上可能有些方格没有被单词占据。
然后把这些没有用的方格找出来,把这些方格上的字母按照字典序组成一个“神秘单词”。
如果你还不了解规则,我们可以具一个例子,比如在下图中寻找单词BEG和GEE。
输入形式
输入的第一行包括三个整数N,M和P(2<=M,N<=10,0<=P<=100)。
接下来的N行,每行包括M个字符,来表示方格盘。
接下来P行给出需要在方格盘中找到的单词。
输入保证填词游戏至少有一组答案。
输入中给出的字母都是大写字母。
输出形式
输出“神秘单词”,注意“神秘单词”中的字母要按照字典序给出。
样例输入
332
EBG
GEE
EGE
BEG
GEE
样例输出
EEG
#include
#include
intmain()
{
intch[26];
memset(ch,0,sizeof(ch));
inti,n,m,p;
charstr[200];
charc;
scanf("%d%d%d",&n,&m,&p);
while(n--)
{
scanf("%s",str);
for(i=0;str[i]!
='\0';i++)
ch[str[i]-'A']++;
}
while(p--)
{
scanf("%s",str);
for(i=0;str[i]!
='\0';i++)
ch[str[i]-'A']--;
}
for(i=0;i<26;i++)
{
if(ch[i]!
=0)
while(ch[i]--)
{
c='A'+i;
printf("%c",c);
}
}
return0;
}
6、垂直直方图
问题描述
输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数。
注意:
只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数。
输入形式
输入包括4行由大写字母组成的文本,每行上字符的数目不超过80个。
输出形式
输出包括若干行。
其中最后一行给出26个大写英文字母,这些字母之间用空格隔开。
前面的几行包括空格和星号,每个字母出现几次,就在这个字母的上方输出一个星号。
注意:
输出的第一行不能是空行。
样例输入
THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG.
THISISANEXAMPLETOTESTFORYOUR
HISTOGRAMPROGRAM.
HELLO!
样例输出
*
*
**
****
****
******
**********
*************
******************
**************************
ABCDEFGHIJKLMNOPQRSTUVWXYZ
#include
#include
intmain()
{
chartemp[1000];
inti,j,len,n,max;
inta[26]={0};
charch[100];
for(i=0;i<4;i++)
{
gets(ch);
len=strlen(ch);
for(j=0;j{
n=ch[j]-65;
if(n<=25&&n>=0)
a[n]++;
}
}
max=a[0];
for(i=1;i<26;i++)
if(a[i]>max)
max=a[i];
j=0;
while(jstrcpy(temp,"");
for(i=0;i<26;i++)
{
if(a[i]<(max-j))
{
if(i)strcat(temp,"");
elsestrcat(temp,"");
}
elseif(a[i]>=(max-j))
{
printf("%s",temp);
strcpy(temp,"");
if(i)printf("*");
elseprintf("*");
}
}
j++;
printf("\n");
}
for(i=0;i<26;i++)
{
chartemp