bupt2024大一上计导控制结构练习

7-12 实验2_6_幂计算

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知两个整数x和y(x为任意整数,y为非负整数),利用循环结构计算x的y次幂并输出。假设x,y及x的y次幂不会超过int型范围。

输入格式:

只有一行,为两个用空格分隔的整数,依次代表x与y的值。

输出格式:

也只有一行,为一个整数,即x的y次幂的计算结果(测试数据中保证没有0的0次幂)。例如输出2的4次幂结果,即16。

输入样例:

-7 5

输出样例:

-16807

answer:

#include<stdio.h>
int main()
{
    int a,b;
    int result=1;
    scanf("%d %d",&a,&b);

    if(b==0){
        result=1;
    }else{
        for(int i=0;i<b;i++){
            result *=a;
        }
    }
    printf("%d",result);
    return 0;
}

 

7-13 实验2_7_统计字符

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

给定一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

输入格式:

只有一行,为一个字符序列,字符序列长度小于100,以回车键结束。

输出格式:

只有一行,为4个用空格分隔的整数,依次代表输入字符序列中英文字符,空格,数字以及其他字符的数量。

输入样例:

Happy new year #100101 !

输出样例:

12 4 6 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    char str[1000];
    fgets(str, sizeof(str), stdin);

    int letterCount = 0;
    int spaceCount = 0;
    int digitCount = 0;
    int otherCount = 0;

    for (int i = 0; str[i]!= '\0'; i++) {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) {
            letterCount++;
        } else if (str[i] == ' ') {
            spaceCount++;
        } else if (str[i] >= '0' && str[i] <= '9') {
            digitCount++;
        } else {
            otherCount++;
        }
    }
    printf("%d %d %d %d",letterCount,spaceCount,digitCount,otherCount-1);
    return 0;
}

当然也是可以不采用字符串的方法,不过会麻烦一点

7-14 实验2_8_打印实心菱形

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个整数n,你要根据n打印出n阶的实心菱形。

输入格式:

只有一个整数n(0<n<40,代表要打印的菱形阶数)。测试用例保证合法。

输出格式:

n阶实心菱形(占2乘n-1行)。

输入样例:

5

输出样例:

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    // 打印上半部分
    for (int i = 1; i <= n; i++) {
        for (int j = n - i; j > 0; j--) {
            printf(" ");
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }

    // 打印下半部分
    for (int i = n - 1; i > 0; i--) {
        for (int j = n - i; j > 0; j--) {
            printf(" ");
        }
        for (int k = 0; k < 2 * i - 1; k++) {
            printf("*");
        }
        printf("\n");
    }

    return 0;
}

打印图形就是去寻找规律

7-15 实验2_9_数列求和

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n与数列公式:

An = 1*2*3+2*3*4+3*4*5+…+(n-2)*(n-1)*n (n>=3)

An = 0 (n=1,2)

请根据n值计算该数列的前n项和的值,并输出。n的取值范围是(1<=n<=3000)。

注意:这里的An 只是一项,而我们要求的是计算该数列的前n项和。

提示:由于n值很大,建议使用long long型变量存储结果。

输入格式:

只有一个正整数n(1<=n<=3000)。

输出格式:

只有一个整数,为计算结果。

输入样例:

3000

输出样例:

12149993250000600

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);

    long long sum=0;
    long long a=0;
    for(long long i=3;i<=n;i++){
        a+=i*(i-1)*(i-2);
        sum+=a;
    }
    printf("%lld",sum);
    return 0;
}

7-16 实验2_10_数字统计一

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

请你写一段程序,统计各类数字的占比。

提示:输出%时需要用%%才能输出。

输入格式:

只有一行,为用空格分隔的若干整数,最后一个整数为0。测试用例保证输入中只包含这一个0。

输出格式:

共三行,依次分别输出3、5、7的倍数的占比(如果某个数同时为多个数的倍数,如15,70等,则不参与统计,但要计到总数中)。占比采用百分数形式,且保留2位小数。这里的占比指的是这类数字的数量跟所有数字的总数(不包括最后的0)比。测试用例保证所有整数可以用int存储。

输入样例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0

输出样例:

25.00%
15.00%
10.00%

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    int num, count = 0, threeCount = 0, fiveCount = 0, sevenCount = 0;
    while (1) {
        scanf("%d", &num);
        if (num == 0)
            break;
        count++;
        if (num % 3 == 0 && num % 5!= 0 && num % 7!= 0) threeCount++;
        if (num % 5 == 0 && num % 3!= 0 && num % 7!= 0) fiveCount++;
        if (num % 7 == 0 && num % 3!= 0 && num % 5!= 0) sevenCount++;
    }
    printf("%.2f%%\n%.2f%%\n%.2f%%",threeCount*100.0/count,fiveCount*100.0/count,sevenCount*100.0/count);
    return 0;
    }

7-17 实验2_11__双11优惠

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

双十一快到了,网上的各个商家纷纷推出各种优惠活动,某商家的优惠方式为满100减30,满200减70,满300减110,满400减160。

请你写一段程序,根据给定条件,计算用户某单实际该付多少钱。

输入格式:

第一行为一个整数t代表测试数据组数。

后边是t行测试数据,每行均为若干个用空格分隔的整数,其中第一个整数为n,代表用户买的商品的个数,后边为n个正整数,分别代表这n件商品的价格。

输出格式:

为t行,每行依次对应输入的t行测试数据用户实际付钱的计算结果。测试用例保证所有整数(包括求和的结果)可以用int存储。

特别说明:虽然程序在本地实际运行时输入和输出是混合在一起显示的,但在OJ上输入和输出是完全分开的,互相不干扰。所以输入整数T后,只要输入一行测试数据,应该立刻输出一行优惠结果;然后是输入下一行测试数据,输出下一个优惠结果。

输入样例:

2
4 10 20 30 40
5 10 20 30 40 50

输出样例:

70
120

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        int n;
        scanf("%d", &n);
        int totalPrice = 0;
        for (int i = 0; i < n; i++) {
            int price;
            scanf("%d", &price);
            totalPrice += price;
        }
        int discount = 0;
        if (totalPrice >= 400) {
            discount = 160;
        } else if (totalPrice >= 300) {
            discount = 110;
        } else if (totalPrice >= 200) {
            discount = 70;
        } else if (totalPrice >= 100) {
            discount = 30;
        }
        printf("%d\n", totalPrice - discount);
    }
    return 0;
}

7-18 实验3_1_简单问题

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

任意给定n个整数,求这n个整数序列的和、最小值和最大值。

输入格式:

第一行为一个整数n(0<n<100),代表要输入的整数个数;第二行为用空格分隔的n个整数。测试用例保证所有整数及求和结果等均可以用int存储。

输出格式:

只有一行,为三个空格分隔的,依次代表整数序列的和、最大值和最小值。

输入样例:

5
10 20 30 40 50

输出样例:

150 50 10

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int num, sum = 0, max, min;
    scanf("%d", &num);
    sum = max = min = num;
    for (int i = 1; i < n; i++) {
        scanf("%d", &num);
        sum += num;
        if (num > max) max = num;
        if (num < min) min = num;
    }
    printf("%d %d %d", sum, max, min);
    return 0;
}

7-19 实验3_2_密码文

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个英文单词,该单词中只包含大写字母“A—Z”与小写字母“a—z”。你的任务是将英文单词翻译成密码文。翻译规则是把所有字母用它后面的第三个字母替换,并假设字符a接在字符z后面,字符A接在字符Z后面。例如:zero将被翻译成chur。

输入格式:

只有一行,为一个长度不超过100,只包含英文大小写字母的字符串(以回车换行符‘\n’结尾)。

输出格式:

只有一行,为对应字符串的密码文。

输入样例:

AZazbf

输出样例:

DCdcei

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    char str[101];
    fgets(str, 101, stdin);
    int i = 0;
    while (str[i]!= '\n' && str[i]!= '\0') {
        if ((str[i] >= 'a' && str[i] < 'x') || (str[i] >= 'A' && str[i] < 'X')) {
            str[i] += 3;
        } else if ((str[i] >= 'x' && str[i] <= 'z') || (str[i] >= 'X' && str[i] <= 'Z')) {
            str[i] -= 23;
        }
        i++;
    }
    printf("%s", str);
    return 0;
}

7-20 实验3_3_确定成绩等级

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

将百分制成绩score按下列原则划分其等级:

score≥90等级为A;

80 ≤score<90,等级为B;

70≤score<80,等级为C;

60≤score<70,等级为D;

score<60,等级为E。

输入格式:

只有一个整数,代表成绩score。测试用例保证所有整数可以用int存储。

输出格式:

只有一行,当成绩小于0或大于100时为"The score is out of range!"(不包括引号),否则为输入的学生成绩对应的等级。

输入样例:

89

输出样例:

B

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include <stdio.h>

int main() {
    int score;
    scanf("%d", &score);
    if (score < 0 || score > 100) {
        printf("The score is out of range!");
    } else if (score >= 90) {
        printf("A");
    } else if (score >= 80) {
        printf("B");
    } else if (score >= 70) {
        printf("C");
    } else if (score >= 60) {
        printf("D");
    } else {
        printf("E");
    }
    return 0;
}

7-22 实验3_5_整除与平方

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个自然数,求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方s。s保证在int范围之内。

输入格式:

只有一行,为自然数n。

输出格式:

只有一行,为一个自然数,代表计算结果。

输入样例:

43

输出样例:

3969

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include<stdio.h>
int main()
{
	int n,i,y=0;
	scanf("%d", &n);
	for (i = 1; i < n; i++)
		if (i % 3 == 0 && i % 7 == 0)
			y += i;
	printf("%d", y * y);
	return 0;
}

7-24 实验3_7_数字拆分

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个正整数n,n的范围是1—999999999。你的任务是把这个整数分解为单个数字,然后从左至右依次打印出每一个数字。例如将整数“12345”分解,得到“1 2 3 4 5”。

输入格式:

只有一个正整数。测试用例保证合法。

输出格式:

只有一行,为输入整数的拆分结果,相邻两个数字之间有一个空格,最后一个数字后是换行符。例如12345的拆分结果为:1 2 3 4 5。

输入样例:

12345

输出样例:

1 2 3 4 5

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include<stdio.h>
int main()
{
	long x;
	long sum=0;//sum ~ 反转数
	scanf("%ld",&x);
	if(x%10==0)
	{
		int t=0;
		while(x%10==0)
		{
			x=x/10;
			t++;
		}
		while(x>0)
		{
			sum=sum*10+x%10;
			x=x/10;
		}
		while(sum>0)
		{
			printf("%d ",sum%10);
			sum=sum/10;
		}
		while(t>1)
		{
			printf("0 ");
			t--;
		}
		printf("0\n");
	}
	else
	{
		while(x>0)
		{
			sum=sum*10+x%10;
			x=x/10;
		}
		while(sum>9)
		{
			printf("%d ",sum%10);
			sum=sum/10;
		}
		printf("%d\n",sum);
	}
	return 0;
}

7-25 实验3_8_位数对调

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个正整数n(可以用int存储),你的任务是将n的最低位与最高位上的数字对调,次低位与次高位上的数字对调,以此类推,直到中间位。最后得到一个新整数并将新的数字输出。需要注意的是:如果当最低位数字与最高位数字对调后,数字的长度变短(也就是最低位为0),则不能对这个数进行位数对调处理。

输入格式:

只有一个正整数,即n。

输出格式:

当n可以进行数字对调时,例如n=123,你应输出“321”;当n不可以进数字对调时,例如n=980,你应输出“The number cannot be changed.”。

输入样例:

1365

输出样例:

5631

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

answer:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int n,t=0;
    while(scanf("%d",&n)==1)//输入值为整数
    {
        if(n%10==0)//n不可以进行数字对调的情况
        {
            printf("The number cannot be changed.");
        }
        else if(n<10)//n为个位数
        printf("%d",n);
        else
        {
           while(n>=10)
           {
             t=n%10;
             n/=10;
             printf("%d",t);
           }
               printf("%d",n);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值