大二暑假计划进行算法学习,希望自己能把这本紫宝书看完,同时通过写博客来督促自己按时完成任务QAQ
以下是第二章课后习题答案,完成后拿出来供小伙伴参考交流
以下所有代码均用C语言完成
2-1 水仙花数
2-2 韩信点兵
2-3 倒三角形
2-4 子序列的和
2-5 分数化小数
2-6 排列
思考
2-1 水仙花数
//水仙花数
#include <stdio.h>
int main(){
int a,b,c;
for(int i=100;i<=999;i++){
a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d ",i);
}
return 0;
}
2-2 韩信点兵
//韩信点兵
#include "stdio.h"
int main(){
int a,b,c,count=1;
while(scanf("%d %d %d",&a,&b,&c)==3){
for(int i=10;i<=100;i++){
if(i%3==a && i%5==b && i%7==c){
printf("Case%d:%d\n",count,i);
break;
}
if(i==100)
printf("Case%d:No answer",count);
}
}
return 0;
}
2-3 倒三角形
//倒三角
#include "stdio.h"
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int num1=i;
int num2=2*(n-i)-1;
while(num1--){ //0 1 2 3 4 5
printf("%s"," ");
}
while(num2--){ //9 7 5 3
printf("%s","*");
}
printf("\n");
}
return 0;
}
2-4 子序列的和
//子序列的和
#include <stdio.h>
int main(){
int n,m;
while(scanf("%d %d",&n,&m)==2){
if(n==0 && m==0) break;
double sum=0;
int count=1;
for(int i=n;i<=m;i++){
//sum+=1.0/(i*i); 陷阱在此
sum+=(1.0/i)*(1.0/i);
}
count++;
printf("Case%d: %.5f\n",count,sum);
}
return 0;
}
2-5 分数化小数
//分数化小数
#include <stdio.h>
int main(){
int a,b,c,count=1;
while(scanf("%d%d%d",&a,&b,&c)==3){
if(a==0 && b==0 && c==0) break;
printf("Case %d:%.*f\n",count,c,(double)a/b);
count++;
}
return 0;
}
2-6排列
//排列
#include "stdio.h"
int main(){
//i的范围为111到333之间
for(int i=111;i<=333;i++){
int s[10];
for(int j=0;j<10;j++)
s[j]=0;
int a=i,b=2*i,c=3*i;
s[a/100]=1;
s[a/10%10]=1;
s[a%10]=1;
s[b/100]=1;
s[b/10%10]=1;
s[b%10]=1;
s[c/100]=1;
s[c/10%10]=1;
s[c%10]=1;
int sum=0;
for(int j=1;j<10;j++)
sum+=s[j];
if(sum==9)
printf("%d %d %d\n",a,b,c);
}
return 0;
}
思考
在这里插入代码片
版权声明:本文为weixin_46044901原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。