当前位置:首页 > 算法竞赛入门经典1-3章习题答案
{
for(e=1;e<=9;e++) {
for(f=1;f<=9;f++) {
for(g=1;g<=9;g++) {
for(h=1;h<=9;h++) {
for(i=1;i<=9;i++) {
if((2*(a*100+b*10+c)==1*(d*100+e*10+f))&&(3*(a*100+b*10+c)==1*(g*100+h*10+i))&
&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i)) }
}
return 0;
}
}
}
}
}
}
}
}
} {
printf(\
解法二:
#include
int x, y, z, a[10] = {0}; for(x = 100; x < 333; x++) {
y = 2*x; z = 3*x;
//令a[出现的数字] = 1
a[x/100] = a[x/10] = a[x] = 1; a[y/100] = a[y/10] = a[y] = 1; a[z/100] = a[z/10] = a[z] = 1; int i, s = 0;
for(i = 1; i < 10; i++) s += a[i]; if(s == 9)
printf(\ for(i = 1; i < 10; i++) //重新赋值为0 a[i] = 0; } return 0; }
第三章
习题3-1 分数统计
输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。 任务1:分数均为不超过100的非负整数
任务2:分数均为不超过100的非负实数,但最多保留两位小数
解法1:
#include
#define Max 10001 //定义数组最大长度为10001,可以在成绩为100时不超出边界 int main() {
int score[Max]; double s[Max]; int n,time,count=0; double a;int c;double b; for(int i=0;i
for(int j=0;j
time=score[0];
for(int j=1;j if(score[j]>time) { time=score[j]; b=j; cout<<\出现最多次数的分数是:\< } /*b中存放的数据即为出现次数最多分数中第一次出现的分数,time中存放的数据为该分数出现最大次数*/ for(int j=0;j s[count++]=j; for(int i=0;i } //该程序虽然简单,但运算量极大,不适合数据及时性要求较高的系统 解法2: #include int i,a[101],n,max; memset(a,sizeof(a),0); //将数组a全置为0 while(scanf(\{ a[n]++; } //通过对输入的n的记录,统计出输入次数,并存于数组a中 /*scanf函数返回的是成功输入的变量数目,当输入完毕后先按enter键,再按ctrl+z键,最后再按enter键,即可结束输入*/ } max=a[0]; for(i=1;i<101;i++) { } for(i=0;i<101;i++) { } printf(\return 0; if(a[i]==max) { } printf(\if(a[i]>=max) { } max=a[i]; 注:解法二仅适用于输入成绩为整数的情况 解法三: #include
共分享92篇相关文档