ACM练习 最大最小值

来源:互联网 发布:中国近十年的gdp数据 编辑:程序博客网 时间:2024/04/28 10:18
时间限制:1000 ms  |  内存限制:65535 KB
描述
给出N个整数,执行M次询问。
对于每次询问,首先输入三个整数C、L、R:

    如果C等于1,输出第L个数到第R个数之间的最小值;

    如果C等于2,输出第L个数到第R个数之间的最大值;

    如果C等于3,输出第L个数到第R个数之间的最小值与最大值的和。

(包括第L个数和第R个数)。

输入
首先输入一个整数T(T≤100),表示有T组数据。
对于每组数据,先输入一个整数N(1≤N≤10000),表示有N个整数;
接下来一行有N个整数a(1≤a≤10000);
然后输入一个整数M,表示有M次询问;
接下来有M行(1≤M≤10000),每行有3个整数C、L、R(1≤C≤3,1≤L≤R≤N)。
输出
按照题意描述输出。每个输出占一行。
样例输入
241 3 2 421 1 42 2 351 2 3 4 513 1 5
样例输出
136

来源

#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;int a[32];int main(){    int t,n,i,j,k,l,value,sum;    bool flag;    for(i=0; i<32;i++)       a[i] = 0;    scanf("%d",&t);    while(t--)    {      scanf("%d",&n);      value=0;      for(i=2; i <= n; i++)      {         flag = true;         l = i;        for(j=0; l>0;j++)         {         if(l>=10)           l = l/10;         else           {               j+=1;               break;           }         }         l = i;         for(k=j-1; k>=0; k--)         {           a[k] = l % 10;           l/=10;         }         if(a[0] !=2)          continue;         sum = 0;         for(k=0; k < j ; k++)         {            if(a[k]==0 || a[k]==1)            {                flag =false;                break;            }            sum += a[k];           if(sum%a[k]!=0)            {                flag =false;                break;            }         }         if(flag == true)         value++;      }    printf("%d\n",value);    }    return 0;}


0 0
原创粉丝点击