用天梯赛打开暑假生活第三天

发布时间 2023-06-19 22:15:44作者: 寒心小呆

从坐牢到入门的程序设计(3)

开始时间2023-06-19 16:12:04

结束时间2023-06-19 22:05:28

前言:哎嘿嘿嘿,大家今天都回家了吧,都在干嘛呢?是不是在想九栋呢,啊哈哈哈。

L1-009 N个数求和

一、题目要求

 二、程序功能测试及说明

  第一行输入一个数,由给定的数字知道一共有多少个分数,分别输出整数部分和小数部分

 三、程序设计思路及结构说明

  在主函数外定义一个L函数,目的是求出两数之间的最大公约数,m是以0为基础与分母的积加上分子乘n,n是以1为基础乘以每个分母,mn都除以每个循环内的最大公约数,循环结束后,分数分为真分数,整数和带分数,当为整数时输出m与n的商,当为真分数时分别按照格式输出m和n,当为带分数时,先输出整数部分,接着按照格式输出m(除去整数后的分子)和n。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int L(int m,int n)
{
    int t;
    t=m%n;
        while(t!=0)
        {
            m=n;
            n=t;
            t=m%n;
        }
    return n;
}
int main()
{
    int N;
    cin>>N;
    int i=0,sum=0;
    int A,B,m=0,n=1,t,k;
    for(i=0;i<N;i++)
    {
        scanf("%d/%d",&A,&B);
        m=m*B;
        m+=A*n;
        n=n*B;
        k=L(m,n);
       m=m/k;
       n=n/k;
    }
     if (m%n==0)
        printf("%d\n",m/n);
    else if (m<n)
        printf("%d/%d\n",m,n);
    else
        printf("%d %d/%d\n",m/n,m%n,n);
}

L1-010 比较大小

一、题目要求

 二、程序功能测试及说明

  功能为输入三个整数,接着按照格式从小到大输出。

三、程序设计思路及结构说明

  先吸收这三个数,做两次循环,循环内容为:若第一个数大于第二个数,交换顺序;若第三个数小于第二个数,交换顺序。循环结束,按照格式输出。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    int temp,i;
    for(i=0;i<2;i++)
    {
        if(a>b){
        temp=b;
        b=a;
        a=temp;
    }
    if(c<b){
        temp=b;
        b=c;
        c=temp;
    }
    }
    printf("%d->%d->%d\n",a,b,c);
    return 0;
}

L1-011 A-B

一、题目要求

 二、程序测试及说明

  输入两个字符串,然后输出第一个字符串中除去第二个字符串和第一个字符串的公共部分。

三、程序设计思路及结构说明

  首先用getline输入两个字符串,接着做嵌套循环,大循环的目的是可以提取第一字符串中的所有字符,内层循环是将提取出的字符与第二字符串所有字符比对,若相等立即结束,当内层循环全部操作完毕,即提取出的字符与第二字符串中字符没一个相等时,输出该字符,循环结束。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    //cin>>s1>>s2;探究cin和getline的区别
    //cout<<s1<<endl;测试s1的值
    int i=0,j=0;
    for(i=0;i<s1.length();i++)
    {
        for(j=0;j<s2.length();j++)
        {
            if(s1[i]==s2[j])break;
        }
        if(j==s2.length())printf("%c",s1[i]);
    }
    return 0;
}

L1-012 计算指数

一、题目要求

 二、程序功能测试及说明

  由所给数字,计算以2为底该数字为指数的结果,按要求输出。

三、程序设计思路及结构说明

  首先吸收这个数字,以该数为循环次数,每一层循环sum乘2,最后按要求输出。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i=0,j=0;
    cin>>n;
    int sum=1;
    for(i=0;i<n;i++)
    {
        sum*=2;
    }
    printf("2^%d = %d\n",n,sum);
    return 0;
}

L1-013 计算阶乘和

一、题目要求

 二、程序功能测试及说明

  由所给输入,输出从1到该数字的所有阶乘。

 三、程序设计思路及结构说明

  首先吸收这个数,做嵌套循环,大循环为从1到目标数,内层循环为计算阶乘,内层循环结束后与sum相加,重置t的值,外层循环结束后按要求输出。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int i=0,sum=0,j=0,t=1;
    for(i=1;i<=n;i++)
    {
        for(j=0;j<i;j++)
        {
            t*=(i-j);
        }
        //printf("%d\n",t);测试t的值
        sum+=t;
        t=1;//重置t的值
    }
    printf("%d\n",sum);
    return 0;
}

L1-014 简单题

一、题目要求

 二、程序功能测试及说明

  无输入,直接输出“悖论”。

三、程序设计思路及结构说明

  呃,直接输出字符串。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    printf("This is a simple problem.\n");
    return 0;
}

L1-015 跟奥巴马一起画方块

一、题目要求

 二、程序功能测试及说明

  给一个数字,给一个字符,输出一个字符正方形。

 三、程序设计思路及结构说明

  吸收整数和字符,接着进行四舍五入操作,是偶数直接除2,是奇数除2加1,将值赋给l。做嵌套循环,外层设置为行数,0开始l结束,内层目标是输出字符,0开始所给整数结束。每一内层循环结束,输出换行。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,l;
    char p;
    cin>>n>>p;
    if(n%2!=0)
    {
        l=n/2+1;
    }
    else l=n/2;
    int i=0,j=0;
    for(i=0;i<l;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%c",p);
        }printf("\n");
    }
    return 0;
}

L1-016 查验身份证

一、题目要求

 二、程序功能测试及说明

  首先给一个整数,这个整数是个数,再输入这些个身份证号,前十七位不是数字输出,前十七位加权取余11不等于校验码输出,当所有条件都符合输出一个字符串。

三、程序设计思路及结构说明

  首先吸收一个整数,定义一个a数组(其中为权重分配),一个str数组(其中为正确校验码),定义一个错误输出标志物flag 定义一个正确输出标志物nb。以该整数为循环次数做循环,每个循环吸收一个字符串并针对该字符串进行分析,若出现非数字将两个标志物置为1,若模值不等于校验值将两个标志物置为1,若标志物flag为1,输出该字符串。当内层循环结束,重置标志物flag。当外层循环结束,标志物nb为1,则输出“All passed”。

四、源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int  a[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char str[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    int i=0,j=0;
    int flag=0,nb=0;
    for(i=0;i<n;i++)
    {
        string s;
        cin>>s;
        int sum=0,temp=0;
        for(j=0;j<17;j++)
        {
            temp=s[j]-'0';
            if(((s[j]-'0')>9)||((s[j]-'0')<0)){
                flag=1;
                nb=1;//检查是否为纯数字
            }//printf("%d\n",flag);//测试flag
            sum=sum+temp*a[j];//计算加权
            
        }
        sum=sum%11;
        //printf("%d",sum);测试sum的值
        if(str[sum]!=s[17]){
            flag=1;nb=1;
        }
        if(flag==1){
            puts(s.c_str());
        }
        flag=0;
    }
    if(nb==0)
        printf("All passed\n");
    return 0;
}

总结:唉嘛,从没感觉手搓代码这么爽,创造了好几种算法。

每日一mo:一mo啥来着,忘了,今天就不emo了,早点睡哈哈哈,明天面试加油!