while/for习题
1.循环输出
输入一个正整数n(1<=n<=100000)
输出1, 2, 3, …, n
每行一个数字
#include <stdio.h>
int main (){
int n;
scanf("%d",&n);
for (int i=1;i<=n;++i){
printf("%d\n",i);
}
}
2.循环判断输出
输入一个正整数n(3<=n<=100000)
输出3, 6, 9, …,即输出所有<=n的,3的倍数。
从小到大依次输出,只考虑3的正整数倍。
每行一个数字。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=n;++i){
if(i%3==0){
printf("%d\n",i);
}
}
}
3.幸运数字
如果一个数字的十进制表示中有7,我们就认为他是幸运数字。
输入一个数字n(1 <= n <= 10^9)
判断n是否是一个幸运数字,如果是的话输出"Yes",否则输出"No"
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int num=0;
for (n;n/10!=0;n=n/10){
if (n%10==7){
num++;
}
}
if (num!=0 || n==7){
printf("YES\n");
}else{
printf("NO\n");
}
}
4.素数判断
输入一个整数n,使用试除法判断它是不是素数。如果是,输出"Yes",否则输出"No"。
#include <stdio.h>
int main(){
int n;
int num=0;
scanf("%d",&n);
for (int i=1;i<n;++i){
if(n%i==0){
num++;
}
}
if (num==1){
printf("YES\n");
}else{
printf("NO\n");
}
}
5.输出最小值
输入一个整数n(n <= 10000)。随后输入n个整数。输出这n个整数中的最小值。
#include <stdio.h>
int main(){
int n;
scanf ("%d",&n);
int s[n];
for (int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int min=s[0];
for (int i=0;i<n;++i){
if(min>s[i]){
min=s[i];
}
}
printf("%d\n",min);
}
6.求最值
输入一个长度为n的数组,输出他的最大值和最小值。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s[n];
for(int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int min,max;
min=s[0];
max=s[0];
for(int i=0;i<n;++i){
if(min>s[i]){
min=s[i];
}
if(max<s[i]){
max=s[i];
}
}
printf("%d %d\n",min,max);
}
7.前缀和
输入一个长度为n(1 <= n <= 100000)数组ai(0<=ai<=1000),输出他的前缀和。
前缀和中的第i项,表示原数组中的前i项的和。
#include <stdio.h>
int main (){
int n;
scanf("%d",&n);
int s[n];
for(int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int d[n];
for(int i=0;i<n;++i){
if (i==0){
d[i]=s[i];
}else{
d[i]=d[i-1]+s[i];
}
}
printf("%d\n",n);
for (int i=0;i<n;i++){
printf("%d\n",d[i]);
}
}
9.倒序输出
给出两个整数a和b,倒序输出a到b之间(包括a和b)的所有整数。
#include <stdio.h>
int main (){
int a,b;
scanf("%d %d",&a,&b);
int s[b-a+1];
for (int i=0;i<(b-a+1);++i){
s[i]=a+i;
}
for (int i=(b-a);i>=0;--i){
printf("%d\n",s[i]);
}
}
10.求和
给出n(n <= 100000)个整数,请你输出这n个整数的和。保证每个整数<=1000。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s[n];
for (int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int sum=0;
for(int i=0;i<n;++i){
sum=sum+s[i];
}
printf("%d\n",sum);
}
11.数列计算
有一列数是:4/7,7/11,11/18,18/29,29/47,47/76……请找出这个数列的规律,编写程序计算并输出这个数列的第 N 项(要求是分数形式),并计算这个数列的前 N 项和(结果四舍五入保留两位小数)。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s[30]={4,7};
for (int i=2;i<30;++i){
s[i]=s[i-2]+s[i-1];
}
int d[30]={7,11};
for (int i=2;i<30;++i){
d[i]=d[i-2]+d[i-1];
}
float f[30];
for (int i=0;i<30;++i){
f[i]=(1.0*s[i])/(1.0*d[i]);
}
float sum=0;
for(int i=0;i<n;++i){
sum=sum+f[i];
}
printf ("%d/%d\n",s[n-1],d[n-1]);
printf("%.2f\n",sum);
}
12.阶乘
给定一个整数n,求它的阶乘,n小于等于10。
nclude <stdio.h>
int main(){
int n;
scanf("%d",&n);
int m=1;
for (int i=n;i>=1;--i){
m=m*i;
}
printf("%d\n",m);
}
13.非负数和
通过键盘不断输入整数,不断读取,输出其中(读到负数前)所有的非负数的和。
注意:对于每组数据,题目共提供n个整数。
这一题有2种写法
1、统计已输入数字之和,直到输入的数字为负数,跳出循环。
2、读完所有数字,但是只计算第一个负数前所有的非负数的和。
第一种写法程序不会读取完全部输入,但是不会被判错…
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s[n];
for (int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int sum=0;
for (int i=0;i<n;++i){
sum=sum+s[i];
if (s[i]<0){
sum=sum-s[i];
break;
}
}
printf("%d\n",sum);
}
14.分数求和
计算1/1+1/2+1/3+…+1/N的和(N为读入值)
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
float sum=0;
for(int i=1;i<=n;++i){
sum=sum+(1.0/(i*1.0));
}
printf("%f\n",sum);
}
15.质数判断
读入一个数N,判断这个数是不是质数(prime number)。
质数:一个数 N 除了1和它本身不存在其他约数,这样的数叫做质数。
约数:整数a除以整数b(b≠0) 除得的商正好是整数而没有余数。则a称为b的倍数,b称为a的约数。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int sum=0;
for(int i=1;i<n;i++){
if(n%i==0){
sum=sum+1;
}
}
if(sum==1){
printf("YES\n");
}else{
printf("NO\n");
}
}
16.倍数个数
读入N,求出1…N的范围内所有2或3或5的倍数一共有多少个?
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int sum=0;
for (int i=1;i<=n;++i){
if(i%2==0 || i%3==0 || i%5==0){
sum++;
}
}
printf("%d\n",sum);
}
17.数字反写
读入一个四位数abcd,请你输出他的“反写”的值。
比如读入1015,输出5101;
读入4310,输出134(不能有前导零)
不合法的四位数,如234, 0123, 12412不会作为读入数据。
#include <stdio.h>
int main() {
int n;
int i=0;
int sum=0;
scanf("%d",&n);
while(n!=0){
i=n%10;
n=n/10;
sum = sum*10+i;
}
printf("%d\n",sum);
}
18.分数求和2
有如下数列:
1, - 1/2 , 1/3, - 1/4 , 1/5 ,- 1/6 , …
求这个数列前n个数的和
#include <stdio.h>
#include <math.h>
int main(){
int n;
scanf("%d",&n);
float sum=0;
for (int i=1;i<=n;++i){
sum=sum+(1.0/i)*pow(-1,(i-1));
}
printf("%f\n",sum);
}
17.分数求和3
n!=1 * 2 * 3 * … * n
现在请你求1/1!+1/2!+…+1/n! 的值
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
float sum=0;
int m=1;
for (int i=1;i<=n;++i){
m=m*i;
sum=sum+1.0/m;
}
printf("%f\n",sum);
}
18.9的个数
给个一个正整数n,请你求出1到n之间所有整数中出现了多少个9
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int sum=0;
for (int i=1;i<=n;++i){
if(i%10==9){
sum=sum+1;
}
if(i/10==9){
sum=sum+1;
}
}
printf("%d\n",sum);
}
19.最大的质数
读入一个数n,求比n小的最大的质数是谁。
一个数是质数,当且仅当除了1和它本身以外,没有其他的数能整除它。
#include <stdio.h>
int main(){
int n;
int m=0;
scanf("%d",&n);
int sum=0;
for (int i=2;i<n;++i){
for (int j=1;j<=i;++j){
if(i%j==0){
sum++;
}
}
if (sum==2 && m<i){
m=i;
}
sum=0;
}
printf("%d\n",m);
}
20.回文数
数字回文的判定,如果一个数字从左往右看和从右往左看是一样的,那么我们称
这个数字是回文数字,例如121,454454, 67876,5,22都是回文数字,而223,
56,10就不是回文数字。现在读入一个数字X,请你写程序判断一下它是不是回文数。
#include <stdio.h>
int main() {
int n;
int i=0;
int sum=0;
scanf("%d",&n);
int m=n;
while(m!=0){
i=m%10;
m=m/10;
sum = sum*10+i;
}
// printf ("%d\n",sum);
if (n==sum){
printf("yes\n");
}else{
printf("no\n");
}
}
21.正数的和
先给定n,再给定n个整数,请计算出里面所有正数的和。
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s[n];
for (int i=0;i<n;++i){
scanf("%d",&s[i]);
}
int sum=0;
for (int i=0;i<n;++i){
if(s[i]>0){
sum=sum+s[i];
}
}
printf("%d\n",sum);
}