1191 二维数组每行最大值
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 8968 | 通过数 : 4869
题目描述
求出二维数组每行的最大元素。
输入要求
输入一个3*4的二维数组。
输出要求
输出每行的最大值。各占一行。
输入样例
1 3 5 7 2 6 9 2 11 4 6 5
输出样例
7 9 11
提示
来源
NBU OJ
#include<stdio.h> //C
int main(){
int a[3][4],i,j,max[3];
for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]);
for(i=0;i<3;i++){
max[i]=a[i][0];
for(j=0;j<4;j++){
if(max[i]<a[i][j]) max[i]=a[i][j];
}
}
for(i=0;i<3;i++) printf("%d\n",max[i]);
return 0;
}
1192 约瑟夫问题(1)
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 4247 | 通过数 : 2065
题目描述
约瑟夫问题是一个有趣的游戏。有n个人围成一圈,从第一个人开始沿顺时针方向报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那个人?
输入要求
输入一个整数n。(n<=1000)
输出要求
输出最后剩下的数。
输入样例
5
输出样例
4
提示
来源
NBU OJ
(俺不会,这道题当笔记来看)
(2条消息) 1192 约瑟夫问题(1)(I just want you to know my answer)_张立龙666的博客-_1192 约瑟夫问题(1)
我之前看过一本算法书,它(约瑟夫问题)可以用链表来解决的
#include<stdio.h> //C
int main(){
int a[1000]={0};//将所有定义的数组位置的值都为零,目的是标记它们(被标记的时候为 1)
int m=3,i,n,k=0,c,d=0;//k,i,d均为条件累加值
scanf("%d",&n);
for(i=1;k!=n;i++){//只要找到符合条件 m进行寻找 n 次就结束此循环,结果得出
if(i>n) i=1;//目的给定这 n个数,这 n个数的位置序号永不变
if(a[i]==0){//只要没有被标记,进入此条件语句
d++;//d这个累加值是为了找到等于符合 m值
if(d==m){//d累加值达到 m的时候进入此条件语句
d=0;//重新初始化 d,为去寻找下一次的 m做准备
a[i]=1;//每次被输出的将其标记为 1,为了不进行 d++计数
k++;//只要找到数到 m 的就 + 1,直到进行加到 n就结束 for循环,结果得出
if(k==n) printf("%d\n",i);
}
}
}
return 0;
}
1193
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 8851 | 通过数 : 2921
题目描述
有一个长度为n数组,需要将数组中从指定位置m开始的k个元素倒放在原来的数组中。
输入要求
第一行输入n,m,k (1<=n<=50,1<=m<=n,1<=k<=n-m+1)
第二行输入数组中的n个数。
m代表元素的实际位置而不是在数组中的下标值。
输出要求
输出倒置后的数组,两个数字之间用空格间隔。
输入样例
13 3 11
1 2 3 4 5 6 7 8 9 10 11 12 13
输出样例
1 2 13 12 11 10 9 8 7 6 5 4 3
提示
来源
NBU OJ
#include<stdio.h> //C
int main(){
int n,m,k,a[50],i,set=1;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<m-1;i++){//前--[0,m-1)
if(set){
printf("%d",a[i]);
set=0;
}
else printf(" %d",a[i]);
}
for(i=m+k-2;i>=m-1;i--) printf(" %d",a[i]);//中--[m-1,m+k-2]
for(i=m+k-1;i<n;i++) printf(" %d",a[i]);//后--(m+k-2,n),即 [m+k-1,n)
printf("\n");
return 0;
}
1194 剔除数字0
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 14277 | 通过数 : 5210
题目描述
给定一组数据,将其中的数字0去掉并且输出剩余的元素。
输入要求
第一行输入一个整数n代表数据的个数(1≤n≤50)。
第二行输入这n个数。
输出要求
输出剔除0以后,剩余的数字内容。
输入样例
5 1 5 0 6 0
输出样例
1 5 6
提示
输出时,两个数字之间用空格间隔,最后一个数字的后面没有空格。
来源
NBU OJ
#include<stdio.h> //C
int main(){
int n,a[50],i,set=1;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<n;i++){
if(a[i]==0) continue;
if(set) printf("%d",a[i]),set=0;
else printf(" %d",a[i]);
}
printf("\n");
return 0;
}
1195 巧妙推算走楼梯
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 3181 | 通过数 : 1352
题目描述
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
输入要求
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
输出要求
对于每个测试实例,请输出不同走法的数量。
输入样例
2 2 3
输出样例
1 2
提示
来源
NBU OJ
#include<stdio.h> //C
#include<math.h>
int main(){
int n,a;
double x,y=sqrt(5);
scanf("%d",&n);
while(n){
scanf("%d",&a);
x=(pow((1+y)/2,a)-pow((1-y)/2,a))/y;
printf("%.0f\n",x);
n--;
}
return 0;
}
1196 骨牌铺放
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 2869 | 通过数 : 939
题目描述
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
输入要求
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n .(1<=n<=50)
输出要求
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
输入样例
1 3 2
输出样例
1 3 2
提示
_int 64
来源
NBU OJ
#include<stdio.h> //C
#include<math.h>
int main(){
__int64 a;
double x,y=sqrt(5);
while(~scanf("%I64d",&a)){
a++;
x=(pow((1+y)/2,a)-pow((1-y)/2,a))/y;
printf("%.0f\n",x);
}
return 0;
}
1197 平面分割
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 2010 | 通过数 : 1087
题目描述
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
输入要求
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n,代表折线的数目.
输出要求
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
输入样例
2 1 2
输出样例
2 7
提示
保证所有输入输出数据都在int范围内
来源
NBU OJ
#include<stdio.h> //C
int main(){
int n,m,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&m);
printf("%d\n",(2*m*m)-m+1);
}
return 0;
}
1198
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 9993 | 通过数 : 4638
题目描述
输入一个整数表示一个星期中的某一天,若此数字在[1,7]内,则输出对应英文星期名,否则表示输入错误。例如,输入2,则输出“Tuesday”;输入7,则输出“Sunday”;输入非法数值16,则输出“Illegal day”。(输出不包括双引号)
输入要求
输入一个整数。
输出要求
输出这一天对应的英文星期名。
输入样例
2
输出样例
Tuesday
提示
数字1~7分别对应:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。
来源
NBU OJ
#include<stdio.h> //C
int main(){
int n;
char str[10][10]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
scanf("%d",&n);
if(n>=1&&n<=7) puts(str[n-1]);
else printf("Illegal day\n");
return 0;
}
1199 判断字符串类型
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 13560 | 通过数 : 6293
题目描述
输入一个字符串,其中只能包括数字或字母。对应输入的字符串,输出它的类型。如果是仅由数字构成的那么输出digit,如果是仅由字母构成的那么输出character,如果是由数字和字母一起构成的输出mixed。
输入要求
输入一个字符串,长度不超过1000,且字符串中只包括数字或大、小写字母。
输出要求
输出对应的类型。
输入样例
Sun2009
输出样例
mixed
提示
来源
NBU OJ
#include<stdio.h> //C
#include<string.h>
int main(){
char a[1000];
int i,len=0,set=0,flag=0;
gets(a);
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]>='0'&&a[i]<='9') set=1;
else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z') flag=1;
}
if(set&&flag==0) printf("digit");
else if(set==0&&flag) printf("character");
else printf("mixed");
printf("\n");
return 0;
}