2014年王道论坛计算机考研机试全真模拟考试

题目1553:时钟

题目描述:

给定任意时刻,求时针和分针的夹角(劣弧所对应的角)。

输入:

输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成。

输出:

对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数。

样例输入:
03:00
14:45
样例输出:
90.00
172.50
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
    char str[10];
    int h,m;
    double sum;
    while(scanf("%s",str)!=EOF)
    {
        h=0;
        m=0;
        for(int i=0;i<=1;i++)
            h=h*10+str[i]-'0';
         for(int i=3;i<=4;i++)
            m=m*10+str[i]-'0';
         sum=fabs(5.5*m-30*h);
         if(sum>=180)
            printf("%0.2lf\n",360-sum);
         else
            printf("%0.2lf\n",sum);
    }
    return 0;
}

题目1554:区间问题

题目描述:

给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k。

输入:

输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大小。
接下去一行为n个整数,描述这个数组,整数绝对值不大于100。
最后一行为一个整数k(大小在int范围内)。

输出:

对于每组测试用例,若存在这个连续区间,输出其开始和结束的位置,s,e(s <= e)。
若存在多个符合条件的输出,则输出s较小的那个,若仍然存在多个,输出e较小的那个。
若不存在,直接输出"No"。

样例输入:
5
-1 2 3 -4 9
5
3
-1 2 -3
7
2
-1 1
0
样例输出:
2 3
No
1 2
测试样例通过了,但是WA到没脾气

/*    注意题目描述:接下去一行为n个整数,描述这个数组,整数绝对值不大于100。
    判断如果k比连续子数组和的最大值还大,比最小值还小,那么肯定无解了,直接输出No
*/
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int a[10005];
int b[10005];//b[i]表示前i个元素的和
long long CMX(int n)
{
    int i,k=0;
    long long sum=-100;
    for(i=1;i<=n;i++)
    {
        if(k>0)
            k+=a[i];
        else
            k=a[i];
        if(k>sum)
            sum=k;
   }
   return sum;
}
long long  CMN(int n)
{
    int i,k=0;
    long long sum=100;
    for(i=1;i<=n;i++)
    {
        if(k<0)
            k+=a[i];
        else
            k=a[i];
        if(k<sum)
            sum=k;
   }
   return sum;
}
int main()
{
    int n,k,flag;
    long long sum,max,min;
  //freopen("datain.txt","r",stdin);
  //   freopen("dataout.txt","w",stdout);
    while(cin>>n)
    {
        sum=0;
        flag=0;
        memset(b,0,sizeof(b));
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            sum+=a[i];
            b[i]=sum;
        }
       //  for(int j=1;j<=n;j++)
         //    cout<<b[j]<<" ";
         //cout<<endl;
        cin>>k;
        //求解最大值
        max=CMX(n);
        //求解最小值
        min=CMN(n);
        //cout<<max<<" "<<min<<endl;
        if(k<min||k>max)
        {
            cout<<"No"<<endl;
            continue;
        }
        //利用求解和等于K的序列
        for(int i=1;i<n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(b[j]-b[i]==k)
                {
                    cout<<i+1<<" "<<j<<endl;
                    flag=1;
                    break;

                }
            }
            if(flag)
                break;
        }
         for(int i=1;i<=n;i++)
         {
                if(b[i]==k)
                {
                    cout<<"1"<<" "<<i<<endl;
                    flag=1;
                    break;
                }
        }
        if(!flag)
            cout<<"No"<<endl;
    }
    return 0;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值