【洛谷试炼场】新手村:循环!循环!循环!

P1008 三连击

题目描述:

将1,2,⋯,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

输入格式:

没有输入

输出格式:

若干行,每行3个数字。按照每行第一个数字升序排列。

C++源代码:

#include
int main()
{
    short a,i,n[9],*b,*d;//数组n[9]用于存放3个三位数a、2a、3a包含的9个数 
    bool repeat;//变量repeat用于检测是否出现重复数字或0 
    for(a=100;a<=333;a++)
    {
        b=n;//将指针初始化,指向数组a的首元素 
        repeat=true;//将变量初始化为true,表示无重复数字和0 
        for(i=1;i<=3;i++)//此循环用于构造3个三位数a、2a、3a 
        {
            *(b++)=a*i%10;//将此数的个位数送入b所指向的数组元素 
            *(b++)=a*i/10%10;//将此数的十位数送入b所指向的数组元素 
            *(b++)=a*i/100;//将此数的百位数送入b所指向的数组元素 
        }//循环结束时,n[9]的所有元素已赋值完毕 
        for(b=n;b<=n+7&&repeat;b++)//开始检测n[9]中是否有重复数字或0 
            for(d=b+1;d<=n+8&&repeat;d++)//分别用指针b和d指向n[9]中不同的元素 
                if(*b==*d||!*d)//一旦发现有重复数字或0 
                    repeat=false;//将repeat赋值为false,此后便会跳出这两层循环 
        if(repeat)//倘若没有重复数字和0 
            printf("%-4d%-4d%d\n",a,a*2,a*3);//输出a、2a、3a的值,也即由1-9组成的3个3位数 
    }//循环完毕时,已输出所有满足条件的3个三位数 
    return 0;
}

P1035 级数求和

题目描述:

已知:Sn​=1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn​大于K。

现给出一个整数K(1≤K≤15),要求计算出一个最小的n,使得Sn​>K。

输入格式:

一个正整数K

输出格式:

一个正整数N

C语言源代码:

 #include
 int main()
 {int k,n;
 double sn=0.0;
 scanf("%d",&k);
 for(n=1;;n++)
 {sn+=1.0/n;
 if(sn>k)
  break;
 }
 printf("%d",n);
 return 0;
 }

P1423 小玉在游泳

题目描述:

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式:

输入一个数字(不一定是整数,小于100m),表示要游的目标距离。

输出格式:

输出一个整数,表示小玉一共需要游多少步。

C语言源代码:

#include
int main()
{
    float x,b=2,k=2;
    int i=1;
    scanf("%f",&x);
    for(i=1;i<=99999999;i++)
    {if(k>x)break; //游的距离大于x米,break 
    else
    {b*=0.98;
    k+=b;
    }
    }
    printf("%d",i);//i表示游多少步 
    return 0;
 } 

P1424 小鱼的航程(改进版)

题目描述:

有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?

输入格式:

输入两个整数x,n(表示从周x算起,经过n天,n在long int范围内)。

输出格式:

输出一个整数,表示小鱼累计游泳了多少公里。

C语言源代码:

#include
#define week 7
int main()
{
    int x,n,day_distance=250,total_distance=0;
    scanf("%d%d",&x,&n);//输入周x,经过n天 
    while(n--)
    {
        if(x<=5) total_distance+=day_distance;//如果该天不是双休日 ,小鱼就按照计划正常游泳 
        x=x%week+1;//将下一天的星期数赋值给x 
    }
    printf("%d\n",total_distance);//输出小鱼在这n天的总航程 
    return 0;
}

P1980 计数问题

题目描述:

试计算在区间 1到 n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到11中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。

输入格式:

2个整数n,x,之间用逗号隔开

输出格式:

1个整数,表示x出现的次数

C语言源代码:

#include
#include
int main() 
{
    char s[10]; //用来存储下一个数
    int n=0;
    int x=0; 
    int count = 0; //用来计数
    scanf("%d %d", &n, &x);
    for (int i = 1; i <= n; i++) { //i就是小于等于n的每一个整数
        int temp = i; // 由于不能改变i的值,这里用临时变量代替
        int k = 0; //作为字符数组的下标
        //接下来将数字的每位转换为字符后放入字符串数组中
        while (temp) {
            s[k++] = temp % 10 + '0';
            temp /= 10;
            s[k] = '\0';
        }
        //接下来将字符数组中的每一位与待比对数字比较
        for (int j = 0; j < strlen(s); j++) {
            if (s[j] - '0' == x) count++; //需要转换为数字
        }
    }
    printf("%d\n", count); //打印出来结果并换行
    return 0;
}

 

你可能感兴趣的:(洛谷oj)