7-14 sdut-C语言实验-虎子的虎年理财计划
传说西塔发明了国际象棋而使国王十分高兴,他决定要重赏西塔,西塔说:“我不要你的重赏,陛下,只要你在我的棋盘上赏一些麦子就行了。在棋盘的第1个格子里放1粒,在第2个格子里放2粒,在第3个格子里放4粒,在第4个格子里放8粒,依此类推,以后每一个格子里放的麦粒数都是前一个格子里放的麦粒数的2倍,直到放满第64个格子就行了”。国王觉得很容易就可以满足他的要求,于是就同意了。但很快国王就发现,即使将国库所有的粮食都给他,也不够百分之一。
虎子深受启发,他开始了自己伟大的理财梦想:如果按照上面的复利计算,从这个虎年开始,第一年存1元钱,第二年存2元钱,第三年存4元钱,以此类推。你帮他算算,如果存12年,到下一个虎年虎子会存多少钱?
输入格式:
无输入。
输出格式:
输出虎子12年后的存款数额。
输入样例:
输出样例:
在这里给出相应的输出。例如:
4095
#include<stdio.h>
int main()
{
int n, c=1, sum = 0;
scanf("%d", &n);
while(n--)
{
sum += c;
c *= 2;
}
printf("%d",sum);
return 0;
}
7-15 sdut-C语言实验-完美的素数
素数又称质数。指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。我们定义:如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。现在给你一个正整数,你需要写个程序判断一下这个数按照上面的定义是不是一个完美的素数。
输入格式:
输入包含多组测试数据。
每组测试数据只包含一个正整数 n (1 < n <= 10^6)。
输出格式:
对于每组测试数据,如果 n 是完美的素数,输出“YES”,否则输出“NO”(输出均不含引号)。
输入样例:
在这里给出一组输入。例如:
11
13
#include <stdio.h>
int main()
{
int a, n, i, j, sum = 0;
while (scanf("%d", &n) != EOF)
{
for (i = 2; i < n; i++)
{
if (n % i == 0)
break;
}
if (n == i)
{
sum = 0;
while (n > 0)
{
a = n % 10;
sum = sum + a;
n = n / 10;
}
for (j = 2; j < sum; j++)
{
if (sum % j == 0)
break;
}
if (j == sum)
printf("YES\n");
else
printf("NO\n");
}
else
printf("NO\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int n,i,t,sum=0;
int isprime=1;//是素数定义为1;
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{
if(n%i==0)
isprime=0;//不是素数则isprime为0;
break;
}//整体判断这个整数是不是素数,若不是素数则循环结束;若是素数则进行下面程序看是不是完美素数
if(isprime==1)//是素数;
{
for(t=2;t<=n-1;t++)//再一次遍历数判断他们的和是不是素数
{
int a=n%10;
n/=10;
sum+=a;
}
if(sum%t==0)//和不是素数
isprime=0;//就让这个为0(跟上面条件保持一致;)
}
if(isprime==0)printf("NO");
else printf("YES");
return 0;
}
7-16 sdut-C语言实验-余弦
输入n的值,计算cos(x)。
截图20220915151932.png
输入格式:
输入数据有多行,每行两个数,包括x和n。第一数据为x,第二个数据为n。
输出格式:
输出cos(x)的值,保留4位小数。
输入样例:
在这里给出一组输入。例如:
0.0 100
1.5 3
输出样例:
在这里给出相应的输出。例如:
1.0000
0.0701
#include<stdio.h>
int main()
{
int n,i;
double x,t,item,sum;
while(scanf("%lf %d",&x,&n)==2)
{
t=x*x;
item=1.0;
sum=1.0;
for(i=1;i<=n;i++)
{
item*=-t;
item/=(i*2-1)*(i*2);
sum+=item;
}
printf("%.4lf\n",sum);
}
return 0;
}
7-17 sdut-C语言实验-求某个范围内的所有素数
求小于n的所有素数,按照每行10个显示出来。
输入格式:
输入整数n(n<10000)。
输出格式:
每行10个依次输出n以内(不包括n)的所有素数。如果一行有10个素数,每个素数后面都有一个空格,包括每行最后一个素数。
输入样例:
100
输出样例:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
#include <stdio.h>
int main()
{
int n;
int i;
int temp;
int a = 0;
scanf("%d",&n);
for(i = 2; i <= n; i++)
{
if(i == 2)
{
printf("%d ",i);
a++;
}
else
{
for(temp = 2; temp < i; temp++)
{
if(i % temp == 0)
{
break;
}
}
if(i == temp)
{
printf("%d ",i);
a++;
if(a%10==0)
printf("\n");
}
}
}
return 0;
}
#include<stdio.h>
int main()
{
int i, k, n, t = 0;
scanf("%d", &n);
for (i = 2; i <= n; i++)
{//外层循环用来姜小于n的数全部走一遍,每一个书即为一个i。
for (k = 2; k<i; k++)//对每个i再进行从1到i的遍历,看i是不是符合素数的定义。
if (i%k == 0) break;//不是素数。ko掉这个i。
if (i == k)//没找到其他因子,i就是k,即i是素数,有以下输出
{
printf("%d ", i);//注意空格。
t+=1;//t用于计数每有一个符合的i,t+1,当t数到10换行。
if (t % 10 == 0)
printf("\n");
}
}
return 0;
}
7-18 水仙花数
分数 20
作者 徐镜春
单位 浙江大学
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1
3
+5
3
+3
3
。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
#include<stdio.h>
int main()
{
int x = 1 , y = 1;
int n;
scanf("%d",&n);
for(int i = 1 ; i < n ;i ++)
{
x *= 10;
y *= 10;
}
y *= 10;
for(int i = x ;i < y ;i ++)
{
int t = i,sum = 0;
while(t != 0)
{
int m = n,tt = 1, l = t%10;
while(m--)
{
tt*=l;
}
sum += tt;
t /= 10;
//
}
//printf("sum = %d\n",sum);
if(sum==i)
printf("%d\n",i);
}
return 0;
}
#include <stdio.h>
int pow(int m,int n)
{ int j,s=1;
for(j=1;j<=n;j++)
{
s=s*m;
}
return s;
}
int main()
{
int x,n,i,a,b;
scanf("%d",&n);
for(x=pow(10,n-1);x<pow(10,n);x++)
{
int b = x,sum=0;
for (i = 1; i <= n; i++)
{
a = b % 10;
b = b / 10;
sum = sum + pow(a, n);
}
if (sum == x)
{
printf("%d\n",x);
}
}
return 0;
}
7-19 计算阶乘和
对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。
输入格式:
输入在一行中给出一个不超过10的正整数N。
输出格式:
在一行中输出S的值。
输入样例:
3
输出样例:
9
#include<stdio.h>
int main()
{
int n=0,sum=0,t=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
t*=i;
sum+=t;
}
printf("%d",sum);
return 0;
}
7-20 输出整数各位数字
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
#include<stdio.h>
int main()
{
int num=0,t=0,mask=1;
scanf("%d",&num);
t=num;
while(t>9)
{
t/=10;
mask*=10;
}
while(mask>0)
{
printf("%d ",num/mask);
num%=mask;
mask/=10;
}
return 0;
}
7-21 打印九九口诀表
下面是一个完整的下三角九九口诀表:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本题要求对任意给定的一位正整数N,输出从11到N*N的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
#include<stdio.h>
int main()
{
int i, j, n;
scanf("%d", & n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
return 0;
}
7-22 找完数
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
#include <stdio.h>
#include <math.h>
int main(void)
{
int i,m,n,j,s,k;
int flag=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
int s=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
s+=j;
}
}
if(s==i)
{
flag=1;
printf("%d = ",s);
for(k=1; k<s;k++)
{
if(s%k==0)
{
if(k==s/2)printf("%d",k);
else printf("%d + ",k);
}
}
printf("\n");
}
}
if(flag==0)printf("None");
return 0;
}
7-23 编程打印空心字符菱形
本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
输入格式:
输入在一行中给出起始字母(范围为英文大写字母A-G)和菱形的高度(为不超过10的奇数)。
输出格式:
输出空心字符菱形。
输入样例:
B 5
输出样例:
B
C C
D D
C C
B
#include<stdio.h>
int main()
{
int n;
char a;
scanf("%c %d",&a,&n);
for(int i=0;i<=n/2;i++)
{
for(int j=0;j<n/2-i;j++)
printf(" ");
for(int k=0;k<2*i+1;k++)
{
if(k==0 || k==2*i)
printf("%c",a);
else
printf(" ");
}
printf("\n");
a++;
}
a--;
for(int m=0;m<n/2;m++)
{
a--;
for(int o=0;o<m+1;o++)
printf(" ");
for(int p=0;p<n-2*m-2;p++)
{
if(p==0 || p==n-2*m-2-1)
printf("%c",a);
else
printf(" ");
}
printf("\n");
}
return 0;
}
7-24 求数列前n项之和
分数 10
作者 陈波
单位 山东理工大学
已知数列1,1/3,1/5,1/7,…,求出其前n项之和,其中的实型变量用double类型。
输入格式:
输入n的值,n的值为1到100之间的整数。
输出格式:
以保留两位小数的形式输出数列前n项的和并换行。
输入样例:
3
输出样例:
1.53
#include<stdio.h>
int main()
{
int i,n,a;
scanf("%d",&n);
double sum = 0;
for(i=1;i<=n;i++)
{
a=2*i-1;
sum+=(1.0)/a;
}printf("%.2f\n",sum);
return 0;
}