模拟卷.C

1.分支_sine之舞

样例输入

3

样例输出

((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1

2.数组_和最大子序列 

 

样例输入

5
3 -2 3 -5 4

样例输出

4

 3.二维数组_星辰大海

 

样例输入

2 
2 
S. 
#T 
2 
RD 
DR 
3 
S.# 
.#. 
.T# 
3 
RL 
DDD 
DDRR 

样例输出

I get there!
I am dizzy!
I have no idea!
I am out!
I get there!

 4. 蛇矩阵

样例输入

5

样例输出

1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

终.万年历:

 

样例输入

2010 9 

样例输出

---------------------
 Su Mo Tu We Th Fr Sa
---------------------
           1  2  3  4
  5  6  7  8  9 10 11
 12 13 14 15 16 17 18
 19 20 21 22 23 24 25
 26 27 28 29 30
---------------------


 简单:

猴子吃桃

int main(){
    int n;
    static int cont=1;
    scanf("%d",&n);
    for (int i = 0; i < n-1; ++i) {
        cont=(cont+1)*2;
    }
    printf("%d",cont);


 小日历:

int main(){
    int  n,day;
    scanf("%d",&n);//days
    scanf("%d",&day);
    for (int i = 0; i < day-1; ++i) 
        printf("   ");    
    //getchar();
    for(int i=1;i<=n;i++){
        if((i+day-1)%7==0)printf("%2d\n",i);
        else printf("%2d ",i);  
    }        }

答案:

#include<stdio.h>
int a=0;
int n;
int AN(int b){
    a++;
    if(a==b){
        printf("sin(%d)",a);
        a=0;
    }
    else if(a%2==0){
        printf("sin(%d+",a);
        AN(b);
        printf(")");
    }
    else if(a%2!=0){
        printf("sin(%d-",a);
        AN(b);
        printf(")");
    }
}
int SN(int b){
    if(b==1){
        AN(1);
        printf("+%d",n);
    }
    else{
        b--;
        printf("(");
        SN(b);
        printf(")");
        AN(b+1);
        printf("+%d",n-b);
    }
}
int main(){
    int b;
    scanf("%d",&n);
    b=n;
    SN(b);
}
1:将输入的数组设为a[n],建立一个和数组sum[n],令sum[1]=a[1],
2:从1开始,设temp=sum[i-1]+a[i],此时,若是temp<sum[i-1],则说明a[i]是负数,而负数的出现必然使得这一段的序列和减小,所以sum[i]必需要在此时重置为0,表示在此时,由于此位置上出现了负数而不得不开启新的序列;若是temp>=sum[i-1],则说明此时的序列和是没有减少的,在这个基础上使得sum[i]=temp;
3:递归2中所说的操作,直到遍历完N个数;
#include<stdio.h>
int main()
{
    int n,max;
    int a[100005]={0};
    int sum[10005]={0};
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    max=sum[1]=a[1];
    for(int i=2;i<=n;i++)
    {
        int temp=sum[i-1]+a[i];
        if(temp<sum[i-1])
        {
            sum[i]=0;
        }
        else
        {
            sum[i]=temp;
        }
        if(max<sum[i])
        {
            max=sum[i];
        }
    }
    printf("%d\n",max);
    return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
    char map[51][51],s[1001];
    int t,n,m,i,j,len,x,y,sx,sy;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d\n",&n);
        for(i=0;i<n;i++)
        {
            gets(map[i]);
            for(j=0;j<n;j++)
            {
                if(map[i][j]=='S')
                {
                    sx=i;
                    sy=j;
                }
            }
        }
        scanf("%d\n",&m);
        while(m--)
        {
            gets(s);
            len=strlen(s);
            x=sx;
            y=sy;
            for(i=0;i<len;i++)
            {
                if(s[i]=='U')
                    x--;
                else if(s[i]=='L')
                    y--;
                else if(s[i]=='D')
                    x++;
                else if(s[i]=='R')
                    y++;
 
                if(x<0||x>=n||y<0||y>=n)
                {
                    printf("I am out!\n");
                    break;
                }else if(map[x][y]=='#'){
                    printf("I am dizzy!\n");
                    break;
                }else if(map[x][y]=='T'){
                    printf("I get there!\n");
                    break;
                }
            }
            if(i==len)
                printf("I have no idea!\n");
        }
    }
    return 0;
}

#include<stdio.h>
int  main()
{
    int n,i,j,a,b,temp;
    temp=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++){           //控制行
        a=i-1+temp;              //a作为开头
        temp=a;
        b=i+1;      
        for(j=n+1-i;j>0;j--){     //控制列
            if(i!=n && j==1){ //判断一行最后一个
                a += b;
                printf("%d",a);
            }else{
                if(j==n+1-i){    //判断第一个
                    printf("%d ",a);
                }else{
                    a += b;
                    printf("%d ",a);
                    b++; 
                }
            }  
        }
        printf("\n");
    }
    return 0;
}
 >>>>>>> 需解决的问题 <<<<<<<
 1、X月的1号是星期几;用余数的方法来求得第k天后是星期几。第k天后是星期k%7(如果是0代表星期天)
 2、该月份有几天;
 3、2月份天数的特殊处理:
    判断闰年
 4、输出格式问题:
    查看样例输出,可以看出,每一个星期几对应3个空格,即用%3d的格式输出。
  每次输出星期6之后,就要输出\n,但这里需要注意一个问题,即最后输出“——————————-”前也要输出一个\n
***************************************/
#include"stdio.h"
//每月的天数,以365天的来算,其中数组下标表示对应的月份,下标0对应的月份做特殊处理
static int MonthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
/**** 闰年判断函数 ****/
int CnkLeapYear( int year )
{
    //能被4整除但不能被100整除或者能被400整除的年份即为闰年
    if( ( (year % 4 == 0) && (year % 100 != 0) ) || ( year % 4 == 0 ) )
        return 1;
    else
        return 0;
}
/**** 获取星期几的函数 ****/
int GetWeek_day( int year, int month )
{
    int week_day;
    int sum_day = 0;  //2007年1月1日距离所求月份的1号有几天
    /*** 求出year前与2007年之间的天数和***/
    for( int i = 2007;  i < year;  i++) {
        if( 1 == CnkLeapYear( i ) )
            sum_day += 366;
        else
            sum_day += 365;
    }
    /*** 求出在year的month前的天数和 ***/
    if( ( 1 == CnkLeapYear( year ) ) && ( month > 2 ) ) {
        /***** >>>>> 注意!! 这里MonthDay[2]的2月份会根据是否为闰年加一 <<<<<*****/
        MonthDay[2]++;
    }
    for( int j = 1;  j < month  ;  j++) {
        sum_day += MonthDay[j];
    }
    week_day = ( sum_day % 7 + 1) % 7; //用公式计算
    return week_day;
}
int main( void )
{
    int iyear;
    int imonth;
    int iweek_day;  //星期几,数值范围是0~6,0代表星期天
    scanf("%d%d", &iyear, &imonth);
    iweek_day = GetWeek_day( iyear, imonth );  //获取星期几,返回的数值是0~6
    //printf("%d年%d月1日是 星期%d\n", iyear, imonth ,iweek_day);
    /*** 输出模块 ***/
    printf("---------------------\n");
    printf(" Su Mo Tu We Th Fr Sa\n");
    printf("---------------------\n");
    for( int i = 0; i < iweek_day; i++)//前置输出部分,每一个星期几对应3个空格
        printf("   ");
    for( int j = 1;  j <= MonthDay[imonth];  j++) {
        printf("%3d", j);
        iweek_day++;
        if( (7 == iweek_day) ) {
            printf("\n");
            iweek_day = 0;
        }//星期六之后输出\n
    }
    if( iweek_day == 0 );//特殊情况:在最后一天为星期六时不输出\n ,如2015年2月
    else
        printf("\n");
    printf("---------------------\n");
    /*** 以上为打印输出 ***/
    return 0;
}

补:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值