感谢软件学院王明轩与倪乾栋两位学长提供NSWOJ
A - 爱数星星的学姐
感谢衡圆圆学姐出题
方法一:用一维字符串数组接收N次,每次接收数据都遍历一遍数组统计星星数量
方法二:二维字符串数组接收全部数据,然后遍历二维字符串数组
#include
#include
int main()
{
char a[210][210];
int m,n,i,j;
while(~scanf("%d %d",&n,&m))
{
getchar();
if(n==0&&m==0)
break;
int k=0;
for(i=0; ifor(j=0; jscanf("%c",&a[i][j]);
getchar();
}
for(i=0; ifor(j=0; jif(a[i][j]=='*')
k++;
}
printf("%d\n",k);
}
return 0;
}
B - 矩阵中的最大值
感谢肖莎莎学姐出题
方法一:用一维数组接收N次,每次记录接收数据中的最大值
方法二:二维数组接收数据,两层for循环遍历一遍二维数组同时记录最大值
#include
int a[1005][1005];
int main()
{
int t;
int n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
int max=-0x3f3f3f3f;
int a1,b1,i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]>max)
{
max=a[i][j];
a1=i;
b1=j;
}
}
}
printf("%d %d\n",a1,b1);
}
return 0;
}
C - WY的伪冒泡排序
感谢自己出题
签到题,坑点在于给的是实数,并要求保留两位小数,用float或者double类型就好
#include
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
double X,Y,Z,T;//说了是实数,当然用double或者float了
scanf("%lf%lf%lf",&X,&Y,&Z);
if(X>Y)
{
T=X;
X=Y;
Y=T;
}
if(X>Z)
{
T=X;
X=Z;
Z=T;
}
if(Y>Z)
{
T=Y;
Y=Z;
Z=T;
}
printf("%.2lf %.2lf %.2lf\n",X,Y,Z);
}
return 0;
}
D - WXZ的下标游戏
感谢王小珍学姐出题
对于给出的N个数,把这些数作为数组下标,他们对应的序号作为数组内的值
例如给出三个数5 9 4,他们的序号分别是1 2 3,对数组num[]这样赋值:num[5]=1,num[9]=2,num[4]=3。接着M次查询,如果想查询X的序号,直接输出num[X]即可
#include
int main()
{
int n,m;
int a[100],c[100];
while(scanf("%d",&n)!=-1)
{
if(n==0)
break;
scanf("%d",&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
{
int b;
scanf("%d",&b);
for(int j=1;j<=n;j++)
{
if(a[j]==b)
{
c[i]=j;
}
}
}
for(int i=1;i<=m;i++)
printf("%d ",c[i]);
printf("\n");
}
}
E - 回文串判断2
感谢吴荣学长出题
思路都在注释里
#include
#include
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
char str[1005];
scanf("%s",str);
int len=strlen(str);
int left=0;//字符串左端下标
int right=len-1;//字符串右端下标
int flag=1;//是回文串
while(left=0)//循环条件:下标未越界
{
if(str[left]==str[right])//如果两个字符相等
{
left++;//左端向右移
right--;//右端向左移
}
else//遇到两个字符不相等
{
flag=0;//标记为不是回文串
break;//结束循环
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
F - A simple problem created by GM
感谢耿曼学姐出题
头文件看不懂?sort不知道是什么?
没关系,把你看不懂的头文件都删掉,sort换成冒泡排序
还不会?没关系,这题本来就是防AK的,毕竟编程都才入门一周
#include
#include
#include
#include
using namespace std;
int a[105];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
int num=0;
scanf("%d",&n);
for(int i=0; iscanf("%d",&a[i]);
if(a[i]%2!=0)
{
num++;
}
}
a[n]=num;
sort(a,a+n+1);
printf("%d",a[0]);
for(int i=1; i<=n; i++)
{
if(a[i]!=a[i-1])
printf(" %d",a[i]);
}
printf("\n");
}
}
G - ZP的汽车调度
感谢张盼学长出题
此题防AK,果然模拟大法好
#include
#include
#include
#define PI 3.1415927
int main()
{
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
int a[5][100],x;//第一个下标代表车站编号,第二个下标代表每个车站中车的编号有为1没有为0
memset(a,0,sizeof(a));
char b;
for(int i=0; i<5; i++)
for(int j=0; j<2; j++)
{
scanf("%d",&x);//把输入的汽车编号赋值为1;
a[i][x]=1;
}
int m;
scanf("%d",&m);
while(m--)
{
getchar();
scanf("%c",&b);
int c,d,e;
scanf("%d%d%d",&c,&d,&e);
if(b=='p')//e从d到c
a[d][e]=0,a[c][e]=1;//开出赋值为0,开进赋值为1
else//e从c到d
a[c][e]=0,a[d][e]=1;
}
for(int i=0; i<5; i++)//扫描每一个车站
{
for(int j=0; j<100; j++)//扫一遍不为0的就代表有这辆车,输出编号,否则不输出。
if(a[i][j])
printf("%d ",j);
printf("\n");
}
printf("\n");
}
return 0;
}
H - WY的另类乘法
为了降低难度,都说了是两个三位数,拆开加一块再乘就可以了
不会拆数的话去做水仙花数
#include
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,M;
scanf("%d%d",&N,&M);
printf("%d\n",(N%10+N%100/10+N/100)*(M%10+M%100/10+M/100));
}
return 0;
}
I - GLaDOS的日期计算
感谢李朝强学长出题
另一个版本的日期计算
判断闰年,逐月累加即可
标程采用模块化编程,写了两个自定义函数
看不懂没关系,我们有百度啊
#include
int judge(int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
return 0;
}
int days(int year,int month)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
if(month==2)
{
if(judge(year))
return 29;
return 28;
}
return 30;
}
int main()
{
int year,beginmonth,beginday,endmonth,endday;
while(scanf("%d%d%d%d%d",&year,&beginmonth,&beginday,&endmonth,&endday)!=EOF)
{
int sum=0,i;
if(beginmonth==endmonth)
sum=endday-beginday+1;
else
{
sum+=days(year,beginmonth)-beginday+1;
sum+=endday;
for(i=beginmonth+1;iyear,i);
}
printf("%d\n",sum);
}
}
J - 饥渴的lzq学长
不感谢虽然出题但是恶意攻击lzp的刘玉强
这模拟对新生还是挺难
#include
int main()
{
int t,n,num;
char str[5];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int ma=0,mi=100000;
int sum=0;
for(int i=0;i"%s%d",str,&num);
if(mama=num;
if(numprintf("%d %d",ma,mi);
if(n!=16) printf("\nTotal number of girls can not be determined!\n");
else printf(" %d\n",sum);
}
return 0;
}