C语言练习-洛谷【入门6】函数与结构体

1.P5735 【深基7.例1】距离函数

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <time.h>
 
double getDis(double x1,double y1,double x2,double y2);

int main ()
{
    int i,j;
    double x[4],y[4],s=0;
    for(i=0;i<3;i++){
            scanf("%lf%lf",&x[i],&y[i]);

    }
    for(i=0;i<2;i++){
        for(j=i+1;j<3;j++){
            s+=getDis(x[i],y[i],x[j],y[j]);
        }
    }
    printf("%.2lf",s);


   return 0;
}

double getDis(double x1,double y1,double x2,double y2)
{
   /* 获取两点之间的距离*/
   double dis;
   double x=x2-x1;
   double y=y2-y1;
   dis=sqrt((x*x)+(y*y));
   return dis;
}

2.P5736 【深基7.例2】质数筛

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 100001
int isPrimeNumber(int a);

int main(){
    int n,a[MAX],b[MAX]={0};
    scanf("%d",&n);
    int i;
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        if(isPrimeNumber(a[i])&&a[i]!=1){
            b[i]=a[i];

        }
        else{

        }

    }
    for(i=0;i<n;i++){
        if(b[i]!=0){
            printf("%d ",b[i]);
        }
    }
}

int isPrimeNumber(int a){
    int i;
    for(i=2;i<=sqrt(a);i++){
        if(a%i==0){break;
    }
    }
    if(i<=sqrt(a))return 0;
    else return 1;
    
}

3.P5737 【深基7.例3】闰年展示

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 10001
int isLeapYear(int year)
{
    if (year % 400 == 0)
        return 1;
    else if (year % 4 == 0 && year % 100 != 0)
        return 1;
    else
        return 0;
}
int main()
{
    int a, b;
    int i, j, yaer[MAX], count = 0;
    ;
    scanf("%d%d", &a, &b);
    for (i = a; i <= b; i++)
    {
        if (isLeapYear(i))
            count++;
    }
    printf("%d\n", count);
    for (i = a; i <= b; i++)
    {
        if (isLeapYear(i))
            printf("%d ", i);
    }
}

4.P5738 【深基7.例4】歌唱比赛

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 10001
int main()
{
    int n, m, a, max = 0, min = MAX, s[MAX] = {0};
    double grade[MAX];
    scanf("%d%d", &n, &m);
    int i, j;
    for (i = 0; i < n; i++)
    {
        max = 0;
        min = MAX;
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a);
            s[i] += a;
            if (a > max)
                max = a;
            if (a < min)
                min = a;
        }
        grade[i] = 1.0 * (s[i] - min - max) / (m - 2);
    }
    double t = 0;
    for (j = 0; j < n; j++)
    {

        if (grade[j] > t)
            t = grade[j];
    }
    printf("%.2f", t);
}

5.P5739 【深基7.例7】计算阶乘

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 1000001
int n;
long long int m=1;

void factorial(int x){
    m*=x;
    if(x==n)return;
    factorial(x+1);
}
int main(){
    scanf("%d",&n);
    factorial(1);
    printf("%lld",m);
    return 0;
}

6.P5461 赦免战俘

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 2001

int n;
int a[MAX][MAX];
int m;
void absolve(int x,int w,int v){
    if(x==2){
        a[w][v]=0;
        return;
    }
    int i,j;
    for(i=w;i<w+x/2;i++){
        for(j=v;j<v+x/2;j++){
            a[i][j]=0;

        }
    }
    absolve(x/2,w+x/2,v);
    absolve(x/2,w+x/2,v+x/2);
    absolve(x/2,w,v+x/2);
}
int main(){
    scanf("%d",&n);
    int s=1;
    int i,j;
    for(i=1;i<=n;i++){
        s*=2;
    }
    //printf("%d",s);
    for(i=1;i<=s;i++){
        for(j=1;j<=s;j++){
           a[i][j]=1;
        }

    }


    absolve(s,1,1);
  
    for(i=1;i<=s;i++){
        for(j=1;j<=s;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }

}

7.P5740 【深基7.例9】最厉害的学生

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 999
int n;
struct Grade
{
    char name[10];
    int chinese;
    int math;
    int English;
    int sum;
} student[MAX];

int main()
{
    scanf("%d\n", &n);
    int i, max = -1, t;
    for (i = 0; i < n; i++)
    {
        scanf("%s %d %d %d\n", &student[i].name, &student[i].chinese, &student[i].math, &student[i].English);
        student[i].sum = student[i].chinese + student[i].math + student[i].English;
    }
    for (i = 0; i < n; i++)
    {
        if (student[i].sum > max)
        {
            max = student[i].sum;
            t = i;
        }
    }
    printf("%s %d %d %d", student[t].name, student[t].chinese, student[t].math, student[t].English);
}

8.P5741 【深基7.例10】旗鼓相当的对手 - 加强版

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct Student
{
    char name[10];
    int chinese;
    int math;
    int English;
    int sum;
} s[1001];

int main()
{
    int n;
    scanf("%d\n", &n);
    int i, j;
    for (i = 1; i <= n; i++)
    {
        scanf("%s %d %d %d\n", &s[i].name, &s[i].chinese, &s[i].math, &s[i].English);
        s[i].sum = s[i].chinese + s[i].math + s[i].English;
    }
    for (i = 1; i <= n; i++)
    {
        for (j = i + 1; j <= n; j++)
        {
            if (abs(s[i].chinese - s[j].chinese) <= 5 &&
                abs(s[i].math - s[j].math) <= 5 &&
                abs(s[i].English - s[j].English) <= 5 &&
                abs(s[i].sum - s[j].sum) <= 10)
                printf("%s %s\n", s[i].name, s[j].name);
        }
    }
}

9.P5742 【深基7.例11】评等级

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 1001
int n;
struct Student
{
    int sno;
    int grade;
    int Qgrade;
    double Cgrade;
    int sum;
} s[MAX];
int main()
{
    scanf("%d\n", &n);
    int i, j;
    for (i = 0; i < n; i++)
    {
        scanf("%d %d %d\n", &s[i].sno, &s[i].grade, &s[i].Qgrade);
        s[i].Cgrade = s[i].grade * 7 + s[i].Qgrade * 3;
        s[i].sum = s[i].grade + s[i].Qgrade;
    }

    for (i = 0; i < n; i++)
    {
        if (s[i].sum > 140 && s[i].Cgrade >= 800)
            printf("Excellent\n");
        else
            printf("Not excellent\n");
    }
}

10.P1075 [NOIP2012 普及组] 质因数分解

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int n,i,max=0,t;
    scanf("%d",&n);
    for(i=2;i<sqrt(n);i++){
        t=i;
        if(n%t==0)max=t;
    }
    printf("%d",n/max);
  
}

11.P1304 哥德巴赫猜想

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 100001
int N;
int isPrimeNumber(int a)
{
    //判断质数
    int i;
    for (i = 2; i < sqrt(a); i++)
    {
        if (a % i == 0)
        {
            break;
        }
    }
    if (i <= sqrt(a))
        return 0;
    else
        return 1;
}
int main()
{
    scanf("%d", &N);
    int i, j, a, b, t;
    for (i = 4; i <= N; i += 2)
    {
        t = i;
        for (j = 2; j < t; j++)
        {

            if (isPrimeNumber(j) && isPrimeNumber(t - j))
            {
                printf("%d=%d+%d\n", t, j, t - j);
                break;
            }
        }
    }
    return 0;
}

12.P1217 [USACO1.5] 回文质数 Prime Palindromes

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int isPrimeNumber(int x)
{
    int i;
    for (i = 2; i < sqrt(x); i++)
    {
        if (x % i == 0)
            break;
    }
    if (i <= sqrt(x))
        return 0;
    else
        return 1;
}
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    int d1, d2, d3, d4, palindrome;
    //简单粗暴生成回文数
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        palindrome = d1;
        if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
            printf("%d\n", palindrome);
    }
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        palindrome = 10 * d1 + d1;
        if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
            printf("%d\n", palindrome);
    }
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        for (d2 = 0; d2 <= 9; d2++)
        {
            palindrome = 100 * d1 + 10 * d2 + d1;
            if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
                printf("%d\n", palindrome);
        }
    }
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        for (d2 = 0; d2 <= 9; d2++)
        {
            palindrome = 1000 * d1 + 100 * d2 + 10 * d2 + d1;
            if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
                printf("%d\n", palindrome);
        }
    }

    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        for (d2 = 0; d2 <= 9; d2++)
        {
            for (d3 = 0; d3 <= 9; d3++)
            {
                palindrome = 10000 * d1 + 1000 * d2 + 100 * d3 + 10 * d2 + d1;
                if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
                    printf("%d\n", palindrome);
            }
        }
    }
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        for (d2 = 0; d2 <= 9; d2++)
        {
            for (d3 = 0; d3 <= 9; d3++)
            {
                palindrome = 100000 * d1 + 10000 * d2 + 1000 * d3 + 100 * d3 + 10 * d2 + d1;
                if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
                    printf("%d\n", palindrome);
            }
        }
    }
    for (d1 = 1; d1 <= 9; d1 += 2)
    {
        for (d2 = 0; d2 <= 9; d2++)
        {
            for (d3 = 0; d3 <= 9; d3++)
            {
                for (d4 = 0; d4 <= 9; d4++)
                {
                    palindrome = 1000000 * d1 + 100000 * d2 + 10000 * d3 + 1000 * d4 + 100 * d3 + 10 * d2 + d1;
                    if (isPrimeNumber(palindrome) && palindrome >= a && palindrome <= b)
                        printf("%d\n", palindrome);
                }
            }
        }
    }
}

13.P2415 集合求和

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(){
    long long int a,n,s=0;
    while(scanf("%lld",&a)!=EOF){
        n++;
        s+=a;
    }
    int i;
    for(i=1;i<n;i++){
        s*=2;
    }
    printf("%lld",s);
}

14.P5743 【深基7.习8】猴子吃桃

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 100001
int main(){
    int n,i,m=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++){
        m=(m+1)*2;

    }
    printf("%d",m);

}

15.P5744 【深基7.习9】培训

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 100001
struct Student
{
    char name[20];
    int age;
    int Lgrade;
    int Ngrade;
} s[MAX];
int main()
{
    int n;
    scanf("%d\n", &n);
    int i, j;
    for (i = 0; i < n; i++)
    {
        scanf("%s %d %d\n", &s[i].name, &s[i].age, &s[i].Lgrade);
        s[i].age++;
        s[i].Ngrade = s[i].Lgrade * 1.2;
        if (s[i].Ngrade >= 600)
            s[i].Ngrade = 600;
    }
    for (i = 0; i < n; i++)
    {
        printf("%s %d %d\n", s[i].name, s[i].age, s[i].Ngrade);
    }
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值