内大考研专业课(892)2022

内大考研专业课(892)2022,第1张

2022 (892)

分离主要逻辑代码和main函数。
main函数中主要做输入输出 (直接给值)。

第一题

编写函数,给两个18位身份z号字符串,比较出生日期大小,前一个比后一个早返回-1,前一个比后一个晚返回1,相同返回0

#include 

// >>>答案部分
int cmp(char *a, char *b){
    for(int i = 6;i < 14;i ++){
        if(a[i] > b[i])
            return 1;
        else if(a[i] < b[i])
            return -1;
    }
    return 0;
}
// <<<结束

int main(){
    printf("%d\n",cmp("37132720000630461X","37132720000630461X"));
    printf("%d\n",cmp("37132720180630461X","37132720000630461X"));
    printf("%d\n",cmp("37132720000630461X","37132720180630461X"));
    printf("%d\n",cmp("37132720000630461X","37132720000631461X"));
    return 0;
}

0
1
-1
-1
第二题

给一个数组,利用rand函数,随机输出其下标,数字越大下标输出的概率越大。

#include 
#include 
#include 

int get(int a[], int n){
    srand(time(NULL));
    int sum = 0;
    for(int i = 0;i < n;i++)
        sum += a[i];
    int r = rand()%sum;
    for(int i = 0; i < n;i++)
        if((r -= a[i]) < 0)
            return i;
    return 0;
}

int main(){
    int a[5] = {1, 2, 3, 4, 5};
    printf("%d\n", get(a, 5));
    return 0;
}
3
第三题

求一个序列的平方差S。

假设

S = ∑ i ∈ 奇数 S i + 1 2 − S i 2 S = \mathop{\sum}\limits_{i \in 奇数}S^2_{i+1}-S^2_{i} S=i奇数Si+12Si2

#include 

int fun(int a[], int n){
    int ans = 0;
    int flag = -1;
    for(int i = 0;i < n;i++, flag = -flag)
        ans += flag * a[i]*a[i];
    return ans;
}

int main(){
    int a[5] = {1, 2, 3, 4, 5};
    printf("%d\n", fun(a, 5));
    return 0;
}
-15
第四题

给出一个序列,若中间有连续相同的数字,就输出这个数与这个数的个数的相反数,若没有连续相同的,则只输出这个数。如:输入序列为:1 3 1 3 3 6,输出序列为:1 3 1 3 -2 6

两种答案,第一种直接输出,第二种通过全局变量保存(推荐)。

#include 

int main(){
    int x, cnt=1;
    scanf("%d", &x);
    int prex=x;
    while(scanf("%d", &x)!=EOF){
        if(prex == x){
            cnt++;
        }
        else{
            printf("%d ", cnt == 1 ? prex : -cnt);
            cnt = 1;
            prex = x;
        }
    }
    printf("%d\n",prex);
    return 0;
}

-1496725469

由于jupyter不能输入,在jupyter没能成功运行

#include 
#define N 100

int ans[N];
int idx;

void fun(int a[],int n){
    idx=0;
    int cnt = 1;
    a[n] = a[n-1]+1;
    for(int i=1;i<=n;i++){
        if(a[i-1] == a[i]){
            cnt++;
        }
        else{
            ans[idx++] = cnt==1 ? a[i-1] : -cnt;
            cnt = 1;
        }
    }
    
}

int main(){
    int a[N] = {1, 3, 1, 3, 3, 6};
    int x, cnt=0;
    //while(scanf("%d", &x)!=EOF)
    //    a[cnt++] = x;
    cnt=6;
    fun(a,cnt);
    for(int i=0;i<idx;i++)
        printf("%d ",ans[i]);
    return 0;
}
1 3 1 -2 6 
第五题

给出整数p, p ∈ ( 2 n − 1 , 2 n ] p \in (2^{n-1}, 2^n ] p(2n1,2n],求返回数字n;

注:原题意为给出整数p,p在2的n和n-1次方,求返回数字n;

#include 

int fun(int p){
    int res = 1, cnt=0;
    while(res < p)
        res *= 2, cnt++;
    return cnt;
}

int main(){
    int p;
    //scanf("%d", &p);
    p = 1024;
    printf("%d", fun(p));
    return 0;
}
10
第六题

给出整数数列求和,如果超过 2 32 − 1 2^{32}-1 2321,减去 2 32 − 1 2^{32}-1 2321,返回最后值。

#include 
#define N 100
#define M 0xffffffff
#define LL long long

int sum(LL a[], int n){
    LL ans=0;
    for(int i=0;i<n;i++)
        ans = (ans + a[i]) % M;
    return ans;
}

int main(){
    LL a[N] = {0xffffffff, 4294967295, 0xffff, 1};
    printf("%d\n",sum(a, 4));
    return 0;
}
65536
第七题

以1970年1月1日零点开始,给出已经过了多少秒,秒数小于2的32次方,求现在几号。

#include 

int is_leap_year(int year){
    return year%400 == 0 || year%100 != 0 && year%4 == 0;
}

int get_days_of_month(int year, int month){
    switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        case 2:
            return is_leap_year(year) ? 29 : 28;
    }
}

int get_day(int day){
    int year = 1970;
    int month = 1;
    while(day > (is_leap_year(year) ? 366 : 365)){
        day -= is_leap_year(year) ? 366 : 365;
        year++;
    }
    for(int i=1;i<=12;i++){
        int mday = get_days_of_month(year,i);
        if(day > mday)
            day -= mday;
        else
            return day+1;
    }
}

int main(){
    long long unix_timestamp=1664100697;//2022-09-25 18:11:37
    //scanf("%d",&unix_timestamp);
    printf("%d\n",get_day(unix_timestamp/60/60/24));
    return 0;
}
31

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存