【NYOJ 分类——语言入门】——汇总(二)

水仙花数

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 0
描述
请判断一个数是不是水仙花数。
其中水仙花数定义各个位数立方和等于它本身的三位数。
输入
有多组测试数据,每组测试数据以包含一个整数n(100<=n<1000)
输入0表示程序输入结束。
输出
如果n是水仙花数就输出Yes
否则输出No
样例输入
153
154
0
样例输出
Yes
No
来源
C语言课本习题改编
上传者

张云聪

 
#include
using namespace std;
int main()
{
	int a;
	while(1)
	{
		cin>>a;
		if(a==0) break;
		cout<<((a==153||a==370||a==371||a==407)?"Yes":"No")<

公约数和公倍数

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 1
描述
小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
输入
第一行输入一个整数n(0 随后的n行输入两个整数i,j(0 输出
输出每组测试数据的最大公约数和最小公倍数
样例输入
3
6 6
12 11
33 22
样例输出
6 6
1 132
11 66
来源
[苗栋栋]原创
上传者
苗栋栋
 
#include
int main()
{
	unsigned int u,v,r,s,i,d;
	scanf("%u",&s);
	for(i=1;i<=s;i++)
	{
		scanf("%u%u",&u,&v);
		d=u*v;
		while(v!=0)
		{
			r=u%v;
			u=v;
			v=r;
		}
		printf("%u %u\n",u,d/u);
	}
	return 0;
}        

三个数从小到大排序

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 0
描述

现在要写一个程序,实现给三个数排序的功能

输入
输入三个正整数
输出
给输入的三个正整数排序
样例输入
20 7 33
样例输出
7 20 33
来源
[张洁烽]原创
上传者
张洁烽
 
#include 
int main()
{
	int a,b,c,an[3],i,t,j,max,flag;
	scanf ("%d %d %d",&an[0],&an[1],&an[2]);
	for (i=0;i<3;i++)
	{
		t=max=an[i];
		flag=i;
		for (j=i;j<3;j++)
			if (an[j]>t) 
			{
				max=an[j];
				flag=j;
			};
		t=an[i];
		an[i]=max;
		an[flag]=t;
	}
	for (i=2;i>=0;i--)
		printf ("%d ",an[i]);
	return 0;
}
        

阶乘因式分解(一)

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 2
描述

给定两个数m,n,其中m是一个素数。

将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。

输入
第一行是一个整数s(0 随后的s行, 每行有两个整数n,m。
输出
输出m的个数。
样例输入
2
100 5
16 2
样例输出
24
15
来源
网络
上传者
苗栋栋
 
#include
using namespace std;
int get(int n,int num)
{
	if(n==0) return 0;
	else return get(n/num,num)+n/num;
}
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int a,b;
		cin>>a>>b;
		cout<

6174问题

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 2
描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
1
1234
样例输出
4
来源
[张洁烽]原创
上传者
张洁烽


 
#include
#include
#include
using namespace std;
int main()
{
	//freopen("1.txt","r",stdin);
	int k;
	cin>>k;
	while(k--)
	{
		int n,a[4],n1,n2;
		scanf("%d",&n);
		int s=1;
		while(n!=6174)
		{
			a[0]=n%10;
			a[3]=n/1000;
			a[1]=n/10%10;
			a[2]=n/100%10;
			sort(a,a+4);
			n1=1000*a[3]+100*a[2]+10*a[1]+a[0];
			n2=1000*a[0]+100*a[1]+10*a[2]+a[3];
			n=n1-n2;
			s++;
		}
		printf("%d\n",s);
	}
}        

谁获得了最高奖学金

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 2
描述
    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
  1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
  2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
  3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
  4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
  5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
  只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
  现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
输入
第一行输入数据N,表示测试数据组数(0
输出
  每组测试数据输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这X个学生获得的奖学金的总数。
样例输入
1
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
样例输出
ChenRuiyi
9000
28700
来源
NOIP2005
上传者
hzyqazasdf

 
#include
#include
#include
#include
using namespace std;
int calc(int qm,int py,bool gb,bool xb,bool lw)
{
	int all=0;
	if(qm>80 && lw) all+=8000;
	if(qm>85&& py>80) all+=4000;
	if(qm>90) all+=2000;
	if(xb&&qm>85) all+=1000;
	if(gb&&py>80) all+=850;
	return all;
}

int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int m;
		cin>>m;
		int max_num=0,all=0;
		string max_stu;
		while(m--)
		{
			int qm,py,lw;
			string xm,gbs,xbs;
			cin>>xm>>qm>>py>>gbs>>xbs>>lw;
			bool gb=gbs=="Y",xb=xbs=="Y";
			int num=calc(qm,py,gb,xb,lw>0);
			all+=num;
			if(num>max_num) {max_num=num;max_stu=xm;}
		}
		cout<

笨小熊

时间限制: 2000 ms  |  内存限制: 65535 KB
难度: 2
描述

笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入
第一行数据N(0 每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出
每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0
样例输入
2
error
olympic
样例输出
Lucky Word
2
No Answer
0
来源
NOIP2008
上传者
hzyqazasdf
 
#include
#include
#include
#include
using namespace std;

bool isPrime(int n)
{
	if(n==0) return false;
	if(n==1) return false;
	if(n==2) return true;
	for(int i=2;i*i<=n;i++)
	{
		if(n%i==0) return false;
	}
	return true;

}
int min_e(int *p,int *q)
{
	int m=1000;
	for(int* i=p;i!=q;i++)
	{
		if(*i>n;
	while(n--)
	{
		int count[26]={0};
		cin>>str;
		for(int i=0;i!=str.size();++i)
		{
			++count[str[i]-'a'];
		}
		int nn=*max_element(count,count+26)-min_e(count,count+26);
		if(isPrime(nn)) cout<<"Lucky Word"<

鸡兔同笼

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 1
描述
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
输入
第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)
a行里,每行都有一个n和m.(0 输出
输出鸡兔的个数,或者No answer
样例输入
2
14 32
10 16
样例输出
12 2
No answer
来源
[张洁烽]原创
上传者
张洁烽

 
#include
using namespace std;
int main()
{
   int n,a,b,p,q;
   cin>>n;
   while(n--)
   {
      cin>>a>>b;
      q=(b-2*a)/2;
      p=a-q;
      if(p<0 ||q<0 || b%2) cout<<"No answer"<

另一种阶乘问题

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 1
描述

大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*3*5.现在明白现在这种阶乘的意思了吧!

现在你的任务是求出1!!+2!!......+n!!的正确值(n<=20)

输入
第一行输入一个a(a<=20),代表共有a组测试数据
接下来a行各行输入一个n.
输出
各行输出结果一个整数R表示1!!+2!!......+n!!的正确值
样例输入
2
3
5
样例输出
5
23
来源
[张洁烽]原创
上传者
张洁烽
 
/*
#include
using namespace std;
int f(int n)
{
	if(n%2) return n==1?1:n*f(n-2);
	return f(n-1);
}
int g(int n)
{
	return n?g(n-1)+f(n):0;
}
int main()
{
	int n,m;
	cin>>n;
	while(n--)
	{
		cin>>m;
		cout<
using namespace std;
int main()
{
	int n,m,r[]={0,1,2,5,8,23,38,143,248,1193,2138,12533,22928,158063,293198,2320223,4347248,38806673,73266098,727995173,1382724248};
	cin>>n;
	while(n--)
	{
		cin>>m;
		cout<

Financial Management

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 1
描述
Larry graduated this year and finally has a job. He's making a lot of money, but somehow never seems to have enough. Larry has decided that he needs to grab hold of his financial portfolio and solve his financing problems. The first step is to figure out what's been going on with his money. Larry has his bank account statements and wants to see how much money he has. Help Larry by writing a program to take his closing balance from each of the past twelve months and calculate his average account balance.
输入
The input will be twelve lines. Each line will contain the closing balance of his bank account for a particular month. Each number will be positive and displayed to the penny. No dollar sign will be included. 
输出
The output will be a single number, the average (mean) of the closing balances for the twelve months. It will be rounded to the nearest penny, preceded immediately by a dollar sign, and followed by the end-of-line. There will be no other spaces or characters in the output. 
样例输入
100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75
样例输出
1581.42
来源
[张洁烽]原创
上传者
张洁烽


 
#include
#include
using namespace std;

int main()
{
	double sum=0,a;
	for(int i=0;i<12;i++)
	{
		cin>>a;
		sum+=a;
	}
	cout<


你可能感兴趣的:(语言入门,ACM语言入门,NYOJ,语言入门,80题基础,最优代码)