题库要过期啦,把题目记录下来吧那就,以后没事了好看看
目录
6-1 求最大的偶数和最小的奇数的差
分数 10
作者 王跃萍
单位 东北石油大学
求10个数中的最大的偶数和最小的奇数的差。
函数接口定义:
int fun(int a[],int n);
函数fun中a
、n
是用户传入的参数,函数fun的功能是求a
数组中的n
个数中的最大的偶数和最小的奇数的差,并返回此差值。
裁判测试程序样例:
#include<stdio.h>
int fun(int a[],int n);
int main()
{int b[10],i,max,k=0;
for(i=0;i<10;i++) scanf("%d",&b[i]);
printf("%d\n",fun(b,10));
return 0;
}
/* 请在这里填写答案 */
输入样例:
1 2 3 4 5 6 7 8 9 10
输出样例:
9
思路:直接找出最大偶数和最小奇数的值然后计算出差
答案:
int fun(int a[],int n)
{
int max=0,min=999999;
for(int j=0;j<n;j++)
{
if(a[j]%2==0)
{
if(a[j]>max)
max=a[j];
}
else
{
if(a[j]<min)
min=a[j];
}
// printf("max:%d min:%d\n",max,min);
}
return max-min;
}
6-2 字符串中的字符用插入法排序
分数 10
作者 王跃萍
单位 东北石油大学
fun函数的功能是:利用插入法对字符串中的字符按从小到大的顺序进行排序。
函数接口定义:
void fun(char aa[]);
其中 aa
是用户传入的参数。 函数利用插入法对字符串中的字符按从小到大的顺序进行排序。
裁判测试程序样例:
#include <stdio.h>
#define N 80
void fun(char aa[]);
int main()
{
char a[N];
int i;
gets(a);
fun(a);
printf("The string after sorting: %s\n",a);
return 0;
}
/* 请在这里填写答案 */
输入样例:
asdcfv
输出样例:
The string after sorting: acdfsv
思路:用数组和冒泡排序对字符串进行排列
答案:
void fun(char aa[])
{
int m=strlen(aa);
for(int k=0;k<m-1;k++)
{
for(int j=k+1;j<m;j++)
{
if(aa[k]>aa[j])
{
char t;
t=aa[k];
aa[k]=aa[j];
aa[j]=t;
}
}
}
}
6-3 日期几何
分数 10
作者 Happyer
单位 湖北文理学院
关于日期的结构定义如下:
struct DateG{ int yy,mm,dd;};
编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。
函数接口定义:
struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(DateG x);// {2,,4,11} return 465 from{1,1,1}
裁判测试程序样例:
struct DateG{
int yy,mm,dd;
};
char leapYear(int year);//闰年否
struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9}
struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29}
char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09"
//以上为测试程序提供的测试用函数,略去不表,
//以下两函数是必须自己完成的函数
struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(struct DateG x);// {2,,4,11} return 465 from{1,1,1}
int main(){
char st[12];scanf("%s",st);
struct DateG d1=_DateG(st),
d2=Add(d1,60*365);
printf("%s\n",Date2string(d2));
d2=Add(d2,-1000);
printf("%s\n",Date2string(d2));
d2=_DateG("2020-1-23");
printf("%.2f\n",(Days(d2)-Days(d1))/365.0);
return 0;
}
/* 请在这里填写答案 */
输入样例:
输入用-号分隔的出生年月日,系统确保测试数据的合法性
2001-1-1
输出样例:
共三行输出。分别是:60年(按365天计一年精确计算的)后的退休日期;退休前倒计时1000天的日期;武汉抗疫封城时(2020-1-23)的年龄(按每365天为一岁,保留2位小数)。
[2060-12-17]
[2058-03-23]
19.07
这题题目属实不太懂,有会的小伙伴欢迎补充答案
//
6-4 在被调函数中计算任意日期的星期值
分数 10
作者 巨同升
单位 山东理工大学
以下程序的功能是:首先在main函数中输入任意一个日期的年、月、日的值,然后在被调函数weekday中求出该日期是星期几。要求写出函数weekday。
假定从公元第一天开始,就实施格里高利历法。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。
函数接口定义:
void weekday(int y,int m,int d);
其中y、m、d是由主调函数传入的参数。
裁判测试程序样例:
#include <stdio.h>
void weekday(int y,int m,int d);
int main(void)
{int y,m,d;
scanf("%d%d%d",&y,&m,&d);
weekday(y,m,d);
return 0;
}
/* 请在这里填写答案 */
输入样例:
2012 3 25
输出样例:
星期日
思路:我也不知道是哪个大佬弄出来的这个公式,将就看吧
答案:
void weekday(int y,int m,int d)
{
if(m==1||m==2)
{
m+=12;
y--;
}
int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(w)
{
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
}
}
分数 15
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题目要求读入每月工资,计算按月需要累计缴纳的税额(税率见下图),此处只需显示应缴纳的税额,无需减去已缴纳部分。结果保留两位小数。 注意:每月有5000元免税额。
上图为按年累计应纳税所得额
函数接口定义:
double m_tax(double salary,int month);
其中salary
和 month
是用户传入的参数,函数返回每月累计应纳税额。
裁判测试程序样例:
#include<stdio.h>
double m_tax(double salary,int month);
int main()
{
double money,tax;
int i;
for(i=1;i<=12;i++)
{
scanf("%lf",&money);
tax=m_tax(money,i);
printf("the sum of %d months tax is %.2f\n",i,tax);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
1000
2000
10000
5000
8000
500
2000
15000
1000
5000
6000
9000
输出样例:
在这里给出相应的输出。例如:
the sum of 1 months tax is 0.00
the sum of 2 months tax is 0.00
the sum of 3 months tax is 0.00
the sum of 4 months tax is 0.00
the sum of 5 months tax is 30.00
the sum of 6 months tax is 0.00
the sum of 7 months tax is 0.00
the sum of 8 months tax is 105.00
the sum of 9 months tax is 0.00
the sum of 10 months tax is 0.00
the sum of 11 months tax is 15.00
the sum of 12 months tax is 135.00
注意 :3月虽然工资为10000元,但3个月累计免税额为15000元,因此无需纳税。5月时累计免税额为25000元,累计工资收入为26000元,因此应纳税额为1000元,按税率为30元,后面同理所得。
思路:这题看着着真头疼啊,抱歉我不会
//
6-6 求自定类型元素序列的中位数
分数 25
作者 陈越
单位 浙江大学
本题要求实现一个函数,求N
个集合元素A[]
的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType
。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]
中,正整数N
是数组元素个数。该函数须返回N
个A[]
元素的中位数,其值也必须是ElementType
类型。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3
12.3 34 -5
输出样例:
12.30
答案:
ElementType Median( ElementType A[], int N ){
//希尔排序
int d, i , j, k;
ElementType temp;
for(d = N/2; d >= 1; d/=2){
for(i=d;i < N; i++){
for(j=i-d;j>=0&&A[j]>A[j+d];j-=d){
temp = A[j];
A[j] = A[j+d];
A[j+d] = temp;
}
}
}
return A[N/2];
}
6-7 计算A[n]=1/(1 + A[n-1])
分数 10
作者 王跃萍
单位 东北石油大学
函数 fun 的功能是:根据整型形参 n,计算某一数据项的值。
A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …,A[n]=1/(1 + A[n-1])
例如,若 n=10,则应输出:A10=0.617977。
函数接口定义:
float fun(int n);
其中n
是用户传入的参数,函数须返回第n
项的值。
裁判测试程序样例:
#include <stdio.h>
float fun(int n);
int main( )
{ int n ;
scanf("%d", &n ) ;
printf("A%d=%f\n", n, fun(n) ) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
10
输出样例:
A10=0.6180
答案:
float fun(int n)
{
if(n==1)
return 1;
else
return 1/(1+fun(n-1));
}
6-8 π/2≈1+1/3+1/3*2/5+...
分数 10
作者 王跃萍
单位 东北石油大学
函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。
函数接口定义:
double fun(double eps);
其中eps
是用户传入的精度,函数须返回π值。
裁判测试程序样例:
#include<stdio.h>
double fun(double eps);
int main()
{ double x;
scanf("%lf",&x);
printf("Pi=%lf\n",fun(x));
return 0;
}
/* 请在这里填写答案 */
输入样例:
0.0005
输出样例:
Pi=3.140578
答案:
double fun(double e)
{
double s,n,t,p;
n=1.0;
s=1.0;
t=1;
p=0;
while(s>=e)
{
p+=s;
t=n/(2*n+1);
s*=t;
n++;
}
p=p*2;
return p;
}
6-9 求二维数组每行的和
分数 10
作者 王跃萍
单位 东北石油大学
求一个二维数组每行的和。输出二维数组时,将每行的和输出在该行的右边。
函数接口定义:
void fun(int a[3][3],int b[3]);
函数fun中 a
,b
都是用户传入的参数,函数fun的功能是将a
数组中每行元素的和放在b
数组中。
裁判测试程序样例:
#include "stdio.h"
void fun(int a[3][3],int b[3]);
int main()
{int a[3][3]={1,2,3,9,8,4,6,2,1},i,j,b[3];
fun(a,b);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("%4d\n",b[i]);
}
return 0;
}
/* 请在这里填写答案 */
输出样例:
1 2 3 6
9 8 4 21
6 2 1 9
答案:
void fun(int a[3][3],int b[3])
{
for(int i=0;i<3;i++)
{
int sum=0;
for(int j=0;j<3;j++)
{
sum+=a[i][j];
b[i]=sum;
}
}
}
6-10 主对角线的平方,左下三角的乘2
分数 10
作者 王跃萍
单位 东北石油大学
将一个二维数组作如下处理后输出。将主对角线上的元素变为其平方,左下三角的元素变成自身乘2,然后输出左下三角的元素(包括主对角线元素)。
函数接口定义:
void fun(int a[3][3]);
函数fun中 a
是用户传入的参数,函数fun的功能将主对角线上的元素变为其平方,左下三角的元素变成自身乘2。
裁判测试程序样例:
#include<stdio.h>
void fun(int a[3][3]);
int main()
{int i,j,a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
fun(a);
for(i=0;i<3;i++)
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
/* 请在这里填写答案 */
输出样例:
1 2 3
4 5 6
7 8 9
1
8 25
14 16 81
答案:
void fun(int a[3][3])
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i==0&&j==0 || i==1&&j==1 || i==2&&j==2 )
a[i][j]=a[i][j]*a[i][j];
else
a[i][j]=a[i][j]*2;
}
}
}
6-11 字符串中的字符逆序存放
分数 10
作者 王跃萍
单位 东北石油大学
将一个字符串中的字符逆序存放。如字符串为“abcde",则逆序存放后应为"edcba"。
函数接口定义:
void fun(char s[])
s
是用户传入的参数。 函数将字符串s
中的字符逆序存放。
裁判测试程序样例:
#include<stdio.h>
void fun(char s[]);
int main()
{char s[80];
gets(s);
fun(s);
puts(s);
return 0;
}
/* 请在这里填写答案 */
输入样例:
abcde
输出样例:
edcba
答案:
void fun(char s[])
{
int a=strlen(s),m=0;
char arr[80];
for(int i=a-1;i>=0;i--)
{
arr[m]=s[i];
m++;
}
// printf("%s",arr);
// printf("\n");
for(int i=0;i<a;i++)
s[i]=arr[i];
}
6-12 字符串比较
分数 10
作者 王跃萍
单位 东北石油大学
函数fun的功能是比较两个字符串,如果s1=s2,则返回值0;如果s1>s2,则返回值1;如果s1<s2,则返回-1。
函数接口定义:
int fun(char a[],char b[]);
其中a
、b
是用户传入的参数。 函数比较两个字符串,如果a
=b
,则返回值0;如果a
>b
,则返回值1;如果a
<b
,则返回-1。
裁判测试程序样例:
#include "stdio.h"
#include "string.h"
int fun(char a[],char b[]);
int main()
{int t;
char s1[40],s2[40];
gets(s1); gets(s2);
t=fun(s1,s2);
printf("%d\n",t);
return 0;
}
/* 请在这里填写答案 */
输入样例:
asd
fg
输出样例:
-1
答案:
int fun(char a[],char b[])
{
if(strcmp(a,b)==0)
return 0;
else if(strcmp(a,b)>0)
return 1;
else
return -1;
}
6-13 交换最大值和最小值的位置
分数 10
作者 王跃萍
单位 东北石油大学
请编写函数fun,交换一个数组中最大值和最小值的位置,其他元素的位置不变。要求在主函数中输入一组数,然后在调用fun函数后,输出处理后的数据。。
函数接口定义:
void fun(int a[]);
其中 a
是用户传入的参数。函数功能是交换数组 a
中最大值和最小值的位置,其他元素的位置不变。
裁判测试程序样例:
#include <stdio.h>
void fun(int a[]);
int main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
fun(a);
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
/* 请在这里填写答案 */
输入样例:
9 5 1 2 6 3 4 8 7 5
输出样例:
1 5 9 2 6 3 4 8 7 5
答案:
void fun(int a[])
{
int min=999999,max=0,m,n;
for(int i=0;i<10;i++)
{
if(a[i]<min)
{
min=a[i];
m=i;
}
if(a[i]>max)
{
max=a[i];
n=i;
}
}
// printf("max=%d min=%d\n",max,min);
int t=0;
t=a[m];
a[m]=a[n];
a[n]=t;
}
6-14 删去一维数组中所有相同的数
分数 10
作者 王跃萍
单位 东北石油大学
请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
函数接口定义:
int fun(int a[M],int n);
其中 a
和 n
都是用户传入的参数。函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
裁判测试程序样例:
#include <stdio.h>
#define M 10
int fun(int a[M],int n);
int main()
{
int a[M]={1,3,5,5,7,7,7,11,11,13},num;
num=fun(a,M);
printf("num=%d",num);
return 0;
}
/* 请在这里填写答案 */
输出样例:
num=6
答案:
int fun(int a[M],int n)
{
int num=0;
int t=a[0];
for(int i=1;i<n;i++)
{
if(a[i]==t)
{
num++;
}
else
t=a[i];
}
return n-num;
}
6-15 在一个升序排列的数组中插入一个数
分数 10
作者 王跃萍
单位 东北石油大学
编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
函数接口定义:
void fun(int a[N],int number);
其中 a
和 number
都是用户传入的参数。函数在一个已按升序排列的数组 a
中插入一个数 number
,插入后,数组元素仍按升序排列
裁判测试程序样例:
#include <stdio.h>
#define N 11
void fun(int a[N],int number);
int main()
{
int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};
scanf("%d",&number);
printf("The original array:\n");
for(i=0;i<N-1;i++)
printf("%5d",a[i]);
printf("\n");
fun(a,number);
printf("The result array:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
/* 请在这里填写答案 */
输入样例:
6
输出样例:
The original array:
1 2 4 6 8 9 12 15 149 156
The result array:
1 2 4 6 6 8 9 12 15 149 156
答案:
void fun(int a[N],int number)
{
int b[N];
int cnt=0,m=0;
for(int i=0;i<N+1;i++)
{
if(a[i]<number)
{
b[i]=a[m];
m++;
}
else if(a[i]>number&&cnt==0)
{
cnt=1;
b[i]=number;
}
else
{
b[i]=a[m];
m++;
}
}
for(int i=0;i<N+1;i++)
{
a[i]=b[i];
}
}
6-16 求出二维数组的最大元素及其所在的坐标
分数 10
作者 王跃萍
单位 东北石油大学
编写一个函数fun,函数的功能是:求出N×M整型数组的最大元素及其所在的行坐标及列坐标(如果最大元素不唯一,选择位置在最前面的一个)。
函数接口定义:
int fun(int array[N][M]);
其中 a
是用户传入的参数。 函数须返回 N×M整型数组的最大元素,其所在的行坐标及列坐标放在全局变量Row和Col中。
裁判测试程序样例:
#include <stdio.h>
#define N 4
#define M 3
int Row,Col;
int fun(int array[N][M]);
int main()
{
int a[N][M],i,j,max,row,col;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf("%5d",a[i][j]);
printf("\n");
}
max=fun(a);
printf("max=%d,row=%d,col=%d",max,Row,Col);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5 8 4
4 5 11
1 2 3
7 4 1
输出样例:
5 8 4
4 5 11
1 2 3
7 4 1
max=11,row=1,col=2
答案:
int fun(int array[N][M])
{
int max= array[0][0];
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
if(max<array[i][j])
{
max= array[i][j];
Row=i;
Col=j;
}
}
}
return max;
}
6-17 用函数实现从数列中删除一个数
分数 18
作者 yjs
单位 福州大学至诚学院
编写一个函数实现:删除n个元素的数列中下标为k的元素。
测试程序将输入一个下标值,调用本函数,删除数列{1,4,13,9,6,11,18,14,25}中该下标位置的元素,并输出删除后的数列。
函数接口定义:
void deleted ( int a[], int n, int k);
其中 a
、n
和 k
都是用户传入的参数。 a
是数列所在数组的首地址; n
是数列元素个数, k
是[0, 8]区间内的个位数。
裁判测试程序样例:
#include <stdio.h>
void deleted ( int a[], int n, int k);
int main()
{
int a[9]={1,4,13,9,6,11,18,14,25},k;
int i;
scanf("%d",&k);
deleted(a,9,k);
for(i=0;i<8;i++)
printf("%4d", a[i]);
return 0;
}
/*请将答案写在这里*/
输入样例:
输入一个[0,8]间的个位数
0
输出样例:
输出数组中各元素占4列
4 13 9 6 11 18 14 25
答案:
void deleted ( int a[], int n, int k)
{
int b=0;
for(int i=0;i<n;i++)
{
if(i==k)
{
a[b]=a[i+1];
i++;
b++;
}
else
{
a[b]=a[i];
b++;
}
}
}
6-18 用函数实现插入数到数列指定位置
分数 18
作者 yjs
单位 福州大学至诚学院
编写一个函数实现:将一个数插入数列中指定下标的位置,并保持原有数列顺序不变。
测试程序将输入一个数x和下标k,并调用本函数将该数插入9个数的数列中下标为k的位置,并保持原有数列顺序不变,然后输出新的数列(10个数)。
函数接口定义:
在这里描述函数接口。例如:
void insert ( int a[], int n, int x, int k);
其中 a
、n
、x
和 k
都是用户传入的参数。 a
是待查数列的数组首地址; n
是数组元素个数; x
是带插入数的值; k
是带插入数的下标,将实现将x
插入 n
个数的数组 a
中下标为 k
的位置。
裁判测试程序样例:
#include <stdio.h>
void insert ( int a[], int n, int x, int k);
int main()
{
int a[10]={1,4,13,9,6,11,18,14,25},x,k;
int i;
scanf("%d%d",&x,&k);
insert(a,9,x,k);
for(i=0;i<10;i++)
printf("%4d", a[i]);
return 0;
}
/*请将答案写在这里*/
输入样例:
输入两个数,第1个数代表待插入的数值,第2个数应在[0,9]间代表待插入的位置下标
15 9
输出样例:
输出插入15后的数列
1 4 13 9 6 11 18 14 25 15
答案:
void insert ( int a[], int n, int x, int k)
{
if(k==n-1)
a[k]=x;
else
{
for(int i=n-1;i>=k;i--)
{
a[i+1]=a[i];
}
a[k]=x;
}
}
6-19 高效查单III
分数 10
作者 龚雄兴
单位 湖北文理学院
单位上班打卡,一般上班、下班及中间各打一次,每天每个人均应该打卡三次……。编写函数,高效地(使用尽量少的辅助空间,以尽量少的时间代价)找出指定长度的数组中只一次卡的元素(就是假设的少打卡的那一个)。数组元素为整数,可通过getDi()函数取得。
函数接口定义:
vooid fun(int n);
其中 n
是数组中元素的个数。函数须找出数组中单个出现的整数输出。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
int getDi(int i);//return D[i] 用来访问数组元素的函数--测试程序提供
void Init(int n);//数据初始化函数--测试程序提供
void Fun(int n);//需要完成的函数
int main(){
int i,j=0,n;scanf("%d",&n);srand(n);
Init(n);
fun(n);
return 0;
}
输入样例:
10
97 61 97 61 41 97 77 41 41 61
输出样例:
程序输出那个单次出现的整数,并换行。
77
这题题目我看不懂!!!呜呜呜
//
6-20 筛出字符串中的数字字符
分数 10
作者 王跃萍
单位 东北石油大学
编写函数:把一个字符串中的所有英文字母取出,生成一个新的字符串。
函数接口定义:
void fun(char s[]);
其中s
是用户传入的参数。 函数fun的功能是把一个字符串s
中的所有数字字符取出,并重新放回s
中。
裁判测试程序样例:
#include <stdio.h>
void fun(char s[]);
int main()
{
char item[80];
gets(item);
fun(item);
printf("%s\n",item);
return 0;
}
/* 请在这里填写答案 */
输入样例:
as12fg
输出样例:
12
我觉得结尾的\0字符串结尾这个知识点需要记一下!我老是会忘记
答案:
void fun(char s[]){
char a[10];
int x=0,b=strlen(s);
for(int i=0;i<b;i++)
{
if(s[i]>=48&&s[i]<=57)
{
a[x]=s[i];
x++;
}
}
for(int i=0;i<=b;i++)
s[i]=0;
for(int i=0;i<x;i++)
s[i]=a[i];
s[x]='\0';//字符串以\0判断是否为末尾 否则会继续输出
}
编程题
分割线了
---------------------------------------------------------------------------------------------------------------------------------
7-1 字符串排序
分数 20
作者 张泳
单位 浙大城市学院
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted:
black
blue
red
white
yellow
这道题要牢记strcmp和strcpy函数的运用!!
答案:
#include <stdio.h>
#include <string.h>
#define N 81
void swap( char str1[], char str2[] ){
char temp[N];
strcpy(temp, str1); // strcpy:字符串比较函数
strcpy(str1, str2);
strcpy(str2, temp);
}
int main(){
char str[5][N];
int i, j;
for( i=0; i<5; i++ )
scanf(" %s", &str[i]);
for( i=0; i<4; i++ )
{ // 选择排序
int min = i;
for( j=i+1; j<5; j++ )
if( strcmp(str[min], str[j]) > 0 ) // strcmp:字符串比较函数
min = j;
if( min != i )
swap(str[min], str[i]);
}
printf("After sorted:\n");
for( i=0; i<5; i++ )
printf("%s\n", str[i]);
return 0;
}
7-2 验证手机号
分数 5
作者 贺细平
单位 湖南农业大学
某系统在新用户注册时必须输入手机号,为了提高系统效率,防止输错手机号,需要对手机号进行验证。
验证规则为:
(1)长度为11位
(2)由数字0~9组成
(3)必须是1开头
以上3个条件同时满足,则验证通过,否则为不通过。
输入格式:
在一行中一个字符串,长度不超过20个字符。
输出格式:
如果验证通过则输出yes,否则输出no。
输入样例:
13812345678
输出样例:
yes
答案:
#include <stdio.h>
int main()
{
char arr[100];
scanf("%s",&arr);
int m=strlen(arr),cnt=0;
for(int i=0;i<m;i++)
// printf("%c",arr[i]);
{
if(arr[i]>'0'&&arr[i]<'9')
cnt=1;
else
cnt=0;
}
if(m==11&&arr[0]=='1'&&cnt==1)
printf("yes");
else
printf("no");
}
7-3 循环的极值
分数 20
作者 刘勇
单位 重庆巴蜀常春藤学校
对于一个给定的数列, 输出在这个数列里面排第二大的那个数。
输入格式:
第1行:一个整数n(2<=n<=100000),表示数列的长度
第2行:有n个不相等的整数。
输出格式:
一个整数, 表示在这个数列里面排第二大的那个数。
输入样例:
5
2 6 4 3 8
输出样例:
6
答案:
#include <stdio.h>
int main()
{
int t,arr[1000];
scanf("%d",&t);
for(int i=0;i<t;i++)
{
scanf("%d",&arr[i]);
}
for(int i=0;i<t-1;i++)
{
for(int j=i+1;j<t;j++)
{
if(arr[i]>arr[j])
{
int t;
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
printf("%d",arr[t-1-1]);
return 0;
}
7-4 N个数求和
分数 20
作者 陈越
单位 浙江大学
本题的要求很简单,就是求N
个数字的和。麻烦的是,这些数字是以有理数分子/分母
的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N
(≤100)。随后一行按格式a1/b1 a2/b2 ...
给出N
个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分
,其中分数部分写成分子/分母
,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24
这道题看着就麻烦,总而言之就是把它们通分化简 ,感谢大佬提供的代码
答案:
#include <stdio.h>
int gcd(int m,int n);
int main(int argc, char** argv) {
int N;
scanf("%d", &N);
int i,a[N],b[N];
int x,y,c,d,m,n;//x为分子,y为分母
//读取分数
for (i = 0; i < N; i++) {
scanf("%d/%d", &a[i], &b[i]);
}
//通分
x = a[0];
y = b[0];
for (i = 1; i < N; i++) {
x = x * b[i] + a[i] * y;//通分后分子大小
y *= b[i]; //通分后分母大小
c = gcd(x, y); //最大公约数
if(c!=0){
x /= c;//化简后分子
y /= c;//化简后分母
}
}
if(x == 0 && y != 0){
printf("0");
}else{
d = x/y;//求整数部分
x %= y;//求分数部分
if (d != 0 && x != 0) {
printf("%d %d/%d", d, x, y);
}
else if (d != 0 && x == 0) {
printf("%d", d);
}
else {
printf("%d/%d",x, y);
}
}
return 0;
}
//辗转相除法最大公约数
int gcd(int m,int n)
{
while (n) {
int t = n;
m %= n;
n = m;
m = t;
}
return m;
}
7-5 A-B
分数 20
作者 陈越
单位 浙江大学
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A−B的结果字符串。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
答案:
#include<stdio.h>
#include<string.h>
int main()
{
int i=0,j=0,cnt=0;
char arr[10010];
char brr[10010];
int len;
gets(arr);
gets(brr);
len = strlen(brr);
while(arr[i]!='\0')
{
for(j=0;j<len;j++)
{
if(arr[i]==brr[j])
{
cnt=1;
}
}
if(cnt==0)
{
printf("%c",arr[i]);
}
cnt=0;
i++;
}
printf("\n");
return 0;
}
7-6 Phone List
分数 10
作者 兰大飞马
单位 兰州大学
给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S,T,使得 S 是 T 的前缀,多组数据。
输入格式:
第一行一个整数 T,表示数据组数。
对于每组数据,第一行一个数 n,接下来 n 行输入 n 个数字串。
对于全部数据,1≤T≤40,1≤n≤104。
输出格式:
对于每组数据,若存在两个数字串 S,T,使得 S 是
//
T 的前缀,则输出 NO ,否则输出 YES 。
请注意此处结果与输出的对应关系!
输入样例:
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
输出样例:
NO
YES
抱歉这题我不会做
//
7-7 英文单词排序
分数 25
作者 张泳
单位 浙大城市学院
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#
作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
利用二维数组来排序
答案:
#include<stdio.h>
int main()
{
int n;
char arr[50][50];
int b[50],cnt;
for(int i=1;;i++)
{
gets(arr[i]);
if(arr[i][0]=='#')
{
cnt=i;
break;
}
b[i]=strlen(arr[i]);
}
//排序
for(int i=0;i<=50;i++)
{
for(int j=1;j<cnt;j++)
{
if(b[j]==i)
printf("%s ",arr[j]);
}
}
printf("\n");
return 0;
}
7-8 最长对称子串
分数 25
作者 陈越
单位 浙江大学
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
这题有错误!答案不完整,只拿下了一半的分,以后有机会再改吧(可能以后就忘了)
答案:
#include <stdio.h>
#include <string.h>
//循环每一个字符,找到中间的,然后前后比较,记录长度
int main() {
char str[1001];
int i;
int len = 1, max = 1;
int a, b;
gets(str);
int m = strlen(str);
for (i = 1;i < m;i++)
{
len = 1;
a = i-1;
b = i + 1;
while (a >= 0 && b < m)
{
if (str[a] == str[b])
{
len += 2;
a--;
b++;
}
else
break;
}
if (len > max)
max = len;
}
printf("%d", max);
return 0;
}
7-9 统计一行文本的单词个数
分数 15
作者 张彤彧
单位 浙江大学
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
答案:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[10000];
int cnt=0,h=1;
gets(arr);
int a=strlen(arr);
for(int i=0;i<a;i++)
{
if(arr[i]==' ')
{
h=1;
}
if(arr[i]!=' '&&h==1)
{
cnt++;
h=0;
}
}
printf("%d",cnt);
return 0;
}
7-10 稳赢
分数 15
作者 陈越
单位 浙江大学
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
答案:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
char a[100];
scanf("%s",a);
int cnt=0;
while(a[0]!='E')
{
if(cnt==n)
{
if(a[0]=='C')
printf("ChuiZi\n");
else if(a[0]=='B')
printf("Bu\n");
else
printf("JianDao\n");
cnt=-1;
}
else
{
if(a[0]=='C')
printf("Bu\n");
else if(a[0]=='B')
printf("JianDao\n");
else
printf("ChuiZi\n");
}
cnt++;
scanf("%s",a);
}
}
7-11 打印沙漏
分数 20
作者 陈越
单位 浙江大学
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
这题不会,题目没理解透彻,做出来也是全错!!
//
7-12 组合数的和
分数 15
作者 陈越
单位 浙江大学
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
输入格式:
输入在一行中先给出 N(1 < N < 10),随后一行给出 N 个不同的非 0 个位数字。数字间以空格分隔。
输出格式:
输出所有可能组合出来的2位数字的和。
输入样例:
3
2 8 5
输出样例:
330
答案:
#include <stdio.h>
int main()
{
int a[10],n,sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j!=i)
sum+=a[i]*10+a[j];
}
}
printf("%d",sum);
}
7-13 考试周
分数 5
作者 陈越
单位 浙江大学
考试周快到了,浙江大学的电子屏又调皮了…… 本题请你帮小编写一个自动倒计时的程序,对给定的日期(例如“腊八”就对应 8)和倒计时天数(例如电子屏上的“四天之后”就对应 4),自动调整公式里的分母(例如 8/2=4 里面的那个 2)。
输入格式:
输入在一行中给出两个正整数:A 是给定的日期,不超过 30;B 是倒计时天数,不超过 10。
输出格式:
在一行中输出公式 A/X=B,其中 X 是满足等式的数字,输出时保留小数点后 1 位即可。
输入样例:
8 3
输出样例:
8/2.7=3
答案:
#include <stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
double a=m*1.0/n*1.0;
printf("%d/%.1lf=%d",m,a+0.005,n);
return 0;
}
7-14 Cassels方程
分数 10
作者 陈越
单位 浙江大学
Cassels方程是一个在数论界产生了巨大影响的不定方程:x2+y2+z2=3xyz。该方程有无穷多自然数解。
本题并不是要你求解这个方程,只是判断给定的一组 (x,y,z) 是不是这个方程的解。
输入格式:
输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出 3 个正整数 0<x≤y≤z≤1000。
输出格式:
对于每一组输入,如果是一组解,就在一行中输出 Yes
,否则输出 No
。
输入样例:
2
1 1 1
5 6 7
输出样例:
Yes
No
答案:
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
if(x*x+y*y+z*z==3*x*y*z)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
7-15 字母串
分数 15
作者 陈越
单位 浙江大学
英语老师要求学生按照如下规则写一串字母:
- 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写;
- 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写;
- 当然也可以什么都不写,就结束这个字母串。
例如 aAaABCDdcbBC
就是一个合法的字母串;而 dEFfeFGhI
就是非法的。注意 a
没有前一个字母, Z
也没有下一个字母。
现在面对全班学生交上来的作业,老师请你写个程序自动批改。
输入格式:
输入在第一行给出一个不超过 100 的正整数 N。随后 N 行,每行给出一位学生的作业,即仅由英文字母组成的非空字母串,长度不超过 2×106。
输出格式:
对每位学生的作业,如果正确就在一行中输出 Y
,否则输出 N
。
输入样例:
2
aAaABCDdcbBC
dEFfeFGhI
输出样例:
Y
N
这题不行,做出来只对了一半!!!有机会再修订吧(懒癌患者)
答案 :
#include <stdio.h>
#include <string.h>
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
char arr[100];
scanf("%s",&arr);
int a=strlen(arr);
int cnt=0;
for(int j=0;j<a;j++)
{
if(arr[j]>='A'&&arr[j]<='Z')
{
if(arr[j+1]==arr[j]+1&&arr[j]!='Z'||arr[j+1]==arr[j]+32)
{
cnt=1;
// printf("%c",arr[j]);
}
else if(j!=a-1)
{
cnt=0;
break;
}
}
else if(arr[j]>='a'&&arr[j]<='z')
{
if(arr[j+1]==arr[j]-1&&arr[j]!='a'||arr[j+1]==arr[j]-32)
{
cnt=1;
// printf("%c",arr[j]);
}
else if(j!=a-1)
{
cnt=0;
break;
}
}
else
{
cnt=0;
break;
}
}
if(cnt==1)
printf("Y\n");
else
printf("N\n");
}
return 0;
}
7-16 调和平均
分数 10
作者 陈越
单位 浙江大学
N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (≤1000);第 2 行给出 N 个正数,都在区间 [0.1,100] 内。
输出格式:
在一行中输出给定数列的调和平均值,输出小数点后2位。
输入样例:
8
10 15 12.7 0.3 4 13 1 15.6
输出样例:
1.61
答案:
#include <stdio.h>
int main()
{
int t;
double arr[1000],sum=0;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
scanf("%lf",&arr[i]);
sum+=1/arr[i];
}
printf("%.2f",1/(sum/t));
return 0;
}
7-17 西安距离
分数 10
作者 翁恺
单位 浙江大学
小明来到了古都西安,想去参观大唐西市!
西安的道路可以看做是与x轴或y轴垂直的直线,小明位于(a,b),而目的地位于(c,d),问最少几步可以到达。
输入格式:
一行中四个整数,a,b,c,d,表示坐标为(a,b)与(c,d),这里0<=a,b,c,d<=1000
输出格式:
输出这两个点的西安距离。
输入样例:
0 0 3 4
输出样例:
7
答案:
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
int sum=abs(c-a)+abs(d-b);
printf("%d",sum);
return 0;
}
7-18 乘法口诀数列
分数 20
作者 陈越
单位 浙江大学
本题要求你从任意给定的两个 1 位数字 a1 和 a2 开始,用乘法口诀生成一个数列 {an},规则为从 a1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
输入格式:
输入在一行中给出 3 个整数,依次为 a1、a2 和 n,满足 0≤a1,a2≤9,0<n≤103。
输出格式:
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
2 3 10
输出样例:
2 3 6 1 8 6 8 4 8 4
答案:
#include <stdio.h>
int main()
{
int a,b,n,m=2;
scanf("%d %d %d",&a,&b,&n);
int arr[10000];
arr[0]=a,arr[1]=b;
for(int i=0;i<n;i++)
{
int a=arr[i]*arr[i+1];
if(a>9)
{
arr[m]=a/10;
m++;
arr[m]=a%10;
m++;
}
else
{
arr[m]=a;
m++;
}
printf("%d",arr[i]);
if(i!=n-1)
printf(" ");
}
return 0;
}
7-19 谁能进图书馆
分数 10
作者 陈越
单位 浙江大学
为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。
输入格式:
输入在一行中给出 4 个整数:
禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄
这里的禁入年龄线
是指严格小于该年龄的儿童禁止入馆;陪同年龄线
是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 1
和 2
;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线
严格大于 禁入年龄线
。
输出格式:
在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y
,否则输出 年龄-N
,中间空 1 格,行首尾不得有多余空格。
在第二行根据两个询问者的情况输出一句话:
- 如果两个人必须一起进,则输出
qing X zhao gu hao Y
,其中X
是陪同人的编号,Y
是小孩子的编号; - 如果两个人都可以进但不是必须一起的,则输出
huan ying ru guan
; - 如果两个人都进不去,则输出
zhang da zai lai ba
; - 如果一个人能进一个不能,则输出
X: huan ying ru guan
,其中X
是可以入馆的那个人的编号。
输入样例 1:
12 18 18 8
输出样例 1:
18-Y 8-Y
qing 1 zhao gu hao 2
输入样例 2:
12 18 10 15
输出样例 2:
10-N 15-Y
2: huan ying ru guan
这题弯弯绕绕有点多,把思路理清楚就好啦
答案:
#include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
if(c>=a&&d>=a) //两个人的年龄都大于等于禁入年龄线
{
printf("%d-Y %d-Y\n",c,d);
printf("huan ying ru guan");
}
else if(c>=a&&d<a) //第一个人大于等于禁入年龄线 第二人小于
{
if(c>=b) //第一个人大于等于陪同年龄线
{
printf("%d-Y %d-Y\n",c,d);
printf("qing 1 zhao gu hao 2");
}
else //第一个人小于陪同年龄线
{
printf("%d-Y %d-N\n",c,d);
printf("1: huan ying ru guan");
}
}
else if(d>=a&&c<a) //第二个人大于等于禁入年龄线 第一人小于
{
if(d>=b) //第二个人大于等于陪同年龄线
{
printf("%d-Y %d-Y\n",c,d);
printf("qing 2 zhao gu hao 1");
}
else //第二个人小于陪同年龄线
{
printf("%d-N %d-Y\n",c,d);
printf("2: huan ying ru guan");
}
}
else //两个人都小于禁入年龄线
{
printf("%d-N %d-N\n",c,d);
printf("zhang da zai lai ba");
}
return 0;
}
7-20 试试手气
分数 15
作者 陈越
单位 浙江大学
我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:
- 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
- 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。
那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。
输入格式:
输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。
输出格式:
在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。
输入样例:
3 6 5 4 1 4
3
输出样例:
4 3 3 3 4 3
样例解释:
这 3 次摇出的结果依次为:
6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3
答案:
#include <stdio.h>
int main()
{
int a[7] = {0} ; //装6个骰子的初始的点数
int b[7];
int n;
for (int i = 0; i < 6; i++)
{
scanf("%d",&b[i]);
a[i] = b[i];
}
scanf("%d",&n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 6; j++)
{
if (i == 0)//第一次摇骰子
{
if (b[j] != 6)
b[j] = 6;
else
b[j]--;
}
else if (i != 0)
{
if (b[j] - 1 == a[j])
b[j] = b[j] - 2;
else
b[j]--;
}
}
}
for (int i = 0; i < 6; i++)
{
if (i < 5)
printf("%d ",b[i]);
else
printf("%d\n",b[i]);
}
return 0;
}
就这些题了,有几道看不懂就没写,希望有大佬的话能帮我指点一二,在此谢谢各位观看