欢迎访问XYNUOJ
问题 A: Sky 数
时间限制: 1 Sec 内存限制: 33 MB提交: 62 解决: 18
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
输入
输出
样例输入
2992
1234
0
样例输出
2992 is a Sky Number.
1234 is not a Sky Number.
提示
#include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N)!=EOF&&N!=0) //输入
{
int sum1=0, sum2 = 0, sum3 = 0; //初始化
for(int i = N; i > 0;) //10进制各位数字之和
{
sum1 = sum1 + i%10;
i = i / 10;
}
for(int i = N; i > 0;) //16进制各位数字之和
{
sum2 = sum2 + i%16;
i = i / 16;
}
for(int i = N; i > 0;) //12进制各位数字之和
{
sum3 = sum3 + i%12;
i = i / 12;
}
if(sum1==sum2&&sum2==sum3) //判断是否相等,并对应相应输出
{
printf("%d is a Sky Number.\n",N);
}else{
printf("%d is not a Sky Number.\n",N);
}
}
return 0;
}
#include<stdio.h>
int main(){
int panduan(int n,int r);
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
if(panduan(n,10)==panduan(n,12)&&panduan(n,12)==panduan(n,16))//调用函数
printf("%d is a Sky Number.\n",n);
else
printf("%d is not a Sky Number.\n",n);
}
return 0;
}
int panduan(int n,int r) //求一个数对应进制—各位数字之和
{
int sum=0,s;
do{
s=n%r;
n=n/r;
sum=sum+s;
}while(n!=0);
return (sum);
}
上面两种方法时间复杂度并未减小!!!!二更具一种通用性。
#include<stdio.h>
int main(){
int panduan(int n,int r);
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
if(panduan(n,10)==panduan(n,12)&&panduan(n,12)==panduan(n,16))//调用函数
printf("%d is a Sky Number.\n",n);
else
printf("%d is not a Sky Number.\n",n);
}
return 0;
}
int panduan(int n,int r) //求一个数对应进制—各位数字之和
{
int sum=0,s;
do{
s=n%r;
n=n/r;
sum=sum+s;
}while(n!=0);
return (sum);
}
#include<stdio.h>
#include<math.h>
int main()
{
int a;
while(~scanf("%d",&a)&&a!=0)
{
int a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3; //题目已说是一个四位数
a1=a%10;a2=a%100/10;a3=a%1000/100;a4=a/1000;
b1=a%12;b2=a/12%12;b3=a/12/12%12;b4=a/12/12/12%12;
c1=a%16;c2=a/16%16;c3=a/16/16%16;
if((a1+a2+a3+a4)==(b1+b2+b3+b4)&&(a1+a2+a3+a4)==(c1+c2+c3))
{
printf("%d is a Sky Number.\n",a);}
else
{
printf("%d is not a Sky Number.\n",a);
}
}
return 0;
}
问题 B: Encoding
时间限制: 1 Sec 内存限制: 33 MB提交: 37 解决: 3
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
输入
输出
样例输入
2
ABC
ABBCCC
样例输出
ABC
A2B3C
提示
#include <stdio.h>
#include <string.h>
int main(){
int N;
char a[10005];
scanf("%d",&N);
while(N--){ //输入多组测试数据
scanf("%s",a);
int count=1;
for(int i=0;i<strlen(a);i++){ //子串 分为一个字母 多个字母分别按格式输出
if(a[i]==a[i+1])count++;
else{
if(count==1) printf("%c",a[i]);
else printf("%d%c",count,a[i]);
count=1;
}
}
printf("\n");
}
}
问题 C: 分拆素数和
时间限制: 1 Sec 内存限制: 33 MB提交: 36 解决: 23
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
输入
输出
样例输入
30
26
0
样例输出
3
2
提示
#include<stdio.h>
#include<math.h>
int fun(int n) //判断是否为素数
{
int i,t=1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
t=0;
break;
}
}
return t;
}
int main()
{
int n,i=3,j,k,t=0,sum=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
for(i=3;i<n/2;i=i+2)
{
if(fun(i)==1 && fun(n-i)==1)sum++; //拆分两个数,判断是否为素数
}
printf("%d\n",sum);
sum=0;
}
return 0;
}
问题 D: 20岁生日
时间限制: 1 Sec 内存限制: 128 MB提交: 45 解决: 9
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
输入
输出
样例输入
1
1988-03-07
样例输出
7305
#include<stdio.h>
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
int year,month,day;
scanf("%d-%d-%d",&year,&month,&day);
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum1,sum2,sum3,flag,flag1;
sum1 = sum2 = sum3 = 0;
for(i=year+1; i<year+20;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{
sum1 = sum1 + 366;
}else{
sum1 = sum1 + 365;
}
}
//出生那年余下的天数
if(year%4==0&&year%100!=0||year%400==0)
{
a[2] = 29;
flag = 1;
}
for(i=month+1;i<13;i++)
{
sum2 = sum2 + a[i];
}
sum2 = sum2 + a[month] - day;
//20周岁那年多出的天数
if((year+20)%4==0&&(year+20)%100!=0||(year+20)%400==0)
{
a[2] = 29;
flag1 = 1;
}else{
a[2] = 28;
flag1 = 0;
}
for(i=0;i<month;i++)
{
sum3 = sum3 + a[i];
}
sum3 = sum3 + day;
if(flag==1&&flag1==0&&month==2&&day==29)
{
printf("-1\n");
}else{
printf("%d\n",sum1+sum2+sum3);
}
}
return 0;
}
//闰年29天 平年28天 并注意没有20岁生日的条件
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
int i,sum=0;
if(m==2&&d==29) //没有20岁生日
{
if(!((y+20)%400==0||((y+20)%4==0&&(y+20)%100!=0)))
{
printf("-1\n");
continue;
}
}
for(i=1;i<20;i++) //20岁生日 19年的天数
{
if((y+i)%400==0||((y+i)%4==0&&(y+i)%100!=0))
sum+=366;
else
sum+=365;
}
if(m<=2) //如果出生月份<=2, 判断出生年份是否为闰年
{
if(y%400==0||(y%4==0&&y%100!=0))
sum+=366;
else
sum+=365;
}
else if(m>=3) //如果出生月份>=3,判断year+20是否为闰年
{
if((y+20)%400==0||((y+20)%4==0&&(y+20)%100!=0))
sum+=366;
else
sum+=365;
}
printf("%d\n",sum);
}
return 0;
}
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int year,month,day,i,sum,first,last,count=0;
scanf("%d-%d-%d",&year,&month,&day);
if(((year+20)%400!=0&&(year+20)%100==0&&(year+20)%4==0)&&month==2&&day==29)
{
printf("-1\n");
continue;
}
for(i=1;i<=20;i++)
{
if(year%400==0||(year%4==0&&year%100!=0))
count++;
year++;
}
sum=365*20+count;
printf("%d\n",sum);
}
return 0;
}
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
int i,sum=0;
if(m==2&&d==29) //没有20岁生日
{
if(!((y+20)%400==0||((y+20)%4==0&&(y+20)%100!=0)))
{
printf("-1\n");
continue;
}
}
for(i=1;i<20;i++) //20岁生日 19年的天数
{
if((y+i)%400==0||((y+i)%4==0&&(y+i)%100!=0))
sum+=366;
else
sum+=365;
}
if(m<=2) //如果出生月份<=2, 判断出生年份是否为闰年
{
if(y%400==0||(y%4==0&&y%100!=0))
sum+=366;
else
sum+=365;
}
else if(m>=3) //如果出生月份>=3,判断year+20是否为闰年
{
if((y+20)%400==0||((y+20)%4==0&&(y+20)%100!=0))
sum+=366;
else
sum+=365;
}
printf("%d\n",sum);
}
return 0;
}
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int year,month,day,i,sum,first,last,count=0;
scanf("%d-%d-%d",&year,&month,&day);
if(((year+20)%400!=0&&(year+20)%100==0&&(year+20)%4==0)&&month==2&&day==29)
{
printf("-1\n");
continue;
}
for(i=1;i<=20;i++)
{
if(year%400==0||(year%4==0&&year%100!=0))
count++;
year++;
}
sum=365*20+count;
printf("%d\n",sum);
}
return 0;
}
问题 E: Divisible number
时间限制: 1 Sec 内存限制: 128 MB提交: 136 解决: 43
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
1, 2, 3... ... N this n (0 < n < = 1000000000) in the number of how many Numbers can be divided exactly by positive integer b
输入
Input contains multiple sets of data
Each group of data is a line, each row is given two positive integer n, b.
输出
Input contains multiple sets of data
Each group of data is a line, each row is given two positive integer n, b.
样例输入
2 1
5 3
10 4
样例输出
2
1
2
#include<stdio.h>
int main()
{
int n,b;
while(scanf("%d%d",&n,&b)!=EOF)
{
printf("%d\n",n/b);
}
}
//下面用for循环超时0 < n < = 1000000000
#include<stdio.h>
int main()
{
int n, b;
while(scanf("%d%d",&n,&b)!=EOF)
{
int count = 0;
for(int i = 0; i < n; i++)
{
if(i % b == 0)
{
count ++;
}
}
printf("%d\n",count);
}
}
问题 F: Quicksum
时间限制: 1 Sec 内存限制: 128 MB提交: 31 解决: 20
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
A checksum is an algorithm that scans a packet of data and returns a single number. The idea is that if the packet is changed, the checksum will also change, so checksums are often used for detecting transmission errors, validating document contents, and in many other situations where it is necessary to detect undesirable changes in data.
For this problem, you will implement a checksum algorithm called Quicksum. A Quicksum packet allows only uppercase letters and spaces. It always begins and ends with an uppercase letter. Otherwise, spaces and letters can occur in any combination, including consecutive spaces.
A Quicksum is the sum of the products of each character's position in the packet times the character's value. A space has a value of zero, while letters have a value equal to their position in the alphabet. So, A=1, B=2, etc., through Z=26. Here are example Quicksum calculations for the packets "ACM" and "MID CENTRAL":
ACM: 1*1 + 2*3 + 3*13 = 46 MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3 + 6*5 + 7*14 + 8*20 +
9*18 + 10*1 + 11*12 = 650
输入
输出
样例输入
ACM
MID CENTRAL
REGIONAL PROGRAMMING CONTEST
ACN
A C M
ABC
BBC
#
样例输出
46
650
4690
49
75
14
15
#include<stdio.h>
#include<string.h>
int main()
{
char s[305];
while(gets(s))
{
if(s[0] == '#')
{
break;
}
int sum = 0;
for(int i = 0; i < strlen(s); i++)
{
if(s[i] == ' ')
{
continue;
}
sum = sum + (s[i]-'A'+1)*(i+1);
//printf("%d ",sum);
}
printf("%d\n",sum);
}
}
问题 G: Fibonacci Again!
时间限制: 1 Sec 内存限制: 128 MB提交: 112 解决: 25
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
输入
输出
每行输出占一行。
样例输入
2
3
样例输出
Yes
No
//3 7 10 17 27 44 71 115 186 301
//487 788 1275 2063 3338 5401 8739 14140 22879 37019 59898 96917
//156815 253762 410547 664279 1074826 1739105 2813931
/*
#include<stdio.h>
int main()
{
int a[30];
a[1] = 3;
a[2] = 7;
for(int i = 3; i < 31; i++)
{
a[i] = a[i-1]+a[i-2];
printf("%d\n",a[i]);
}
}
*/
#include<stdio.h>
int fib(int n)
{
if(n>2)
return fib(n-1)+fib(n-2);
if(n==1)
return 3;
if(n==2)
return 7;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=-1)
{
int N, i;
if(n==0)
{
printf("No\n");
continue;
}
if(n==1)
{
printf("Yes\n");
continue;
}
N = fib(n);
//printf("%d ",N);
for(i = 2; i < N; i++)
{
if(N % i == 0)
{
break;
}
}
if( i >= N)
{
printf("Yes\n");
}else{
printf("No\n");
}
}
}
问题 H: 最少拦截系统
时间限制: 1 Sec 内存限制: 33 MB提交: 48 解决: 5
[ 提交][ 状态][ 讨论版][ Edit] [ TestData]
题目描述
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
输入
输出
样例输入
8 389 207 155 300 299 170 158 65
样例输出
2
#include<stdio.h>
#include<string.h>
int main(){
int n,i,j,k,a[1000],b[1000]; //声明两个数组,并b[1000]为导弹能打到的高度
while(scanf("%d",&n)!=EOF){
k = 0;
scanf("%d",&a[0]);
b[k] = a[0];
for(i = 1; i < n; i++){
scanf("%d",&a[i]);
for(j = 0; j <= k; j++){
if(b[j] > a[i]){
b[j] = a[i];
break;
} //导弹的拦截高度大于来的导弹的高度
}
if(j > k){ //新增一个拦截系统
b[++k] = a[i];
}
}
printf("%d\n",k+1);
}
return 0;
}