C语言 编程题目 程序设计题目 高中信息科技竞赛编程题目 【100分】

两道 求数学思路.... 函数方面过关 就是没任何头绪

======================================================
圆柱体
用一张纸和剪刀,按下列步骤操作,可以做成无顶的圆柱体:
1、把纸张剪成两部分。
2、从第一部分,剪出一个最大半径的圆,使该圆成为圆柱体的底部。
3、卷起第二部分成为圆柱的侧面,卷起侧面可以有一些重叠的部分,以获取所需的周长,该周长与第2步剪出的圆的周长相等。
对于给定尺寸的纸,使用上述步骤做成圆柱体,并计算可能做成的最大的圆柱体积。
【输入文件数据格式】JS1.in
两个整数w和l(1 ≤ w ≤ l ≤ 100),为纸的宽度和长度。
【输出文件数据格式】JS1.out
输出一个最大的圆柱体积,结果中四合五入保留3位小数。
【输入输出数据样例】
输入10 30
输出 412.095
=====================================================
(本题程序请以 JS2 为文件名存入自己建立的文件夹内)(本题20分)
涂色问题
设有如图所示的具有n(1<=n<=100)个区域的地图,每个区域的数字代表该区域的编号,要在每个区域中涂上红(R)、黄(Y)、兰(B)、白(w)四种颜色之一,并要求相邻的区域涂的颜色不能相同,请找出一种涂色方案。用矩阵来表示区域之间的相邻关系,两个区域之间如果相邻,则值为1,不相邻则值为0,如图所示,(1,2)=1,(1,5)=0。

【输入文件数据格式】JS2.in
共n+1行,第1行表示要涂色的区域数量n
随后的n行,每行有n个数(0或1),表示各个区域的邻接状况。
【输出文件数据格式】JS2.out
共n行,表示从1到n各区域的编号和颜色。
【输入输出样例】

【第一道】
#include <iostream>
using namespace std;
#define pi 3.14159265
double maxvolume(double a,double b)
{
double v1,v2,r;
r=b/(2*pi+2);
v1=pi*r*r*a;
r=a/(2*pi+2);
v2=pi*r*r*b;
if(v1>v2)
return v1;
else
return v2;
}
int main()
{
double a,b;
cout<<"请输入矩形的长宽:";
cin>>a;
cin>>b;
cout<<"最大圆柱体积:"<<maxvolume(a,b)<<endl;
return 0;
}

【第二道】
//事实上,涂色方案不止样例上的一种,我把所有的可行方案都输出了一下
#include <iostream>
using namespace std;
int data[][8]={ {0},
{0,0,1,0,0,0,1,1},
{0,1,0,1,1,1,1,0},
{0,0,1,0,1,0,0,0},
{0,0,1,1,0,1,0,0},
{0,0,1,0,1,0,1,0},
{0,1,1,0,0,1,0,1},
{0,1,0,0,0,0,1,0}
};
int total;
int color[8];
char COLOR[5]={' ','R','Y','B','W'};
void output()
{
total++;
cout<<"["<<total<<"]\t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<COLOR[color[i]];
}
cout<<endl;
}
bool checkcolor(int s)
{
for(int i=1;i<=7;i++)
{
if(data[i][s]==1&&color[i]==color[s])
return false;
}
return true;
}
void drawcolor(int s)
{
if(s>7)
output();
else
for(int i=1;i<=4;i++)
{
color[s]=i;
if(checkcolor(s))
drawcolor(s+1);
}
}
int main()
{
cout<<" \t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<i;
}
cout<<endl;
drawcolor(1);
cout<<endl<<" \t涂色方案总数:"<<total<<endl<<endl;
return 0;
}追问

谢谢 如果可能的话 能不能把第二题的源码 用C语言而不是C++的形式发一下呢.....C++还是有点苦手..

追答

你是为了代码还是思路?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-26
第一题:先分成2部分,第一部分剪出最大圆,就是取长宽的最小值为半径,计算周长。之后计算体积,保存体积。
逐渐扩大剪出的第一部分的面积,重复上面的计算,将每次计算的结构与第一次计算的体积比较,若新的值大,则保留,反之则弃之。
思路就是这样,程序慢慢做。第二题明天看,吃饭了。。。。
相似回答