赞
踩
不知道为什么自己写的不对,以后再来看问题。
7-4 输出英文字母的前驱和后继字母 (10 分)
从键盘输入一个英文字母,输出其前驱字母(即前一个字母)、后继字母(即后一个字母)及其ASCII值。比如输入的字母是b,则前驱字母是a,后继字母是c。而如果输入的字母是a,则前驱字母是z,后继字母是b;如果输入的字母是z,则前驱字母是y,后继字母是a。大写字母的前驱后继字母求法与小写字母相同。
输入一个英文字母。
第一行输出该字母的前驱字母及其ASCII值,第二行输出后继字母及其ASCII值,字母与ASCII值之间用一个空格分隔。
b
结尾无空行
- a 97
- c 99
结尾无空行
a
结尾无空行
- z 122
- b 98
结尾无空行
正确答案:
#include <stdio.h>
int main ()
{
char m,f,l;
m=getchar();
f=m-1;
l=m+1;
if(m>='a'&&m<='z')
{
if(f<'a')
f='z';
if(l>'z')
l='a';
}
else
{
if(f<'A')
f='Z';
if(l>'Z')
l='A';
}
printf("%c %d\n",f,f);
printf("%c %d\n",l,l);
return 0;
}
我的问题:
1.f<'a'能否直接写成当m='a'等等?(没过编译)
2.大佬的代码
if(f<'a')
f='z'-('a'-f)+1;
if(b>'z')
b='z'-f+'a'-1;
是什么意思?
7-5 穷举法搬运砖块问题 (15 分)
这是中国古典算术问题,某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。有多少种搬法用N人正好搬N块砖?
输入正整数N。
输出所有满足条件的搬法,每种搬法占一行。
每行按如下格式依次输出该搬法中男人、女人、小孩的人数,按男人人数的递增顺序输出,中间用空格间隔(=
前后没有多余的空格,行末也无空格)。
men=男人数 women=女人数 child=小孩数
若没有满足条件的搬法,则输出"No solution!"
45
结尾无空行
- men=0 women=15 child=30
- men=3 women=10 child=32
- men=6 women=5 child=34
- men=9 women=0 child=36
结尾无空行
1
结尾无空行
No solution!
结尾无空行
我的代码
#include <stdio.h>
int main()
{
int N,x,y,z,t=0;
scanf("%d",&N);
for(x=0;x<=N/3;x++){
for(y=0;y<=N/2;y++){
for(z=0;z<=N;z+=2){
if(x*3+y*2+z/2==N&&x+y+z==N)
{
printf("men=%d women=%d child=%d\n",x,y,z);
t=1;
}
}}}
if (t==0)
printf("No solution");
return 0;
}
大佬的代码:
#include<stdio.h>
int main()
{
int N;
int i,j,k;
int flag = 0;
scanf("%d", &N);
for(i=0; i<=N/3; i++){
for(j=0; j<=N/2; j++){
for(k=0; k<=N; k+=2){
if((i+j+k == N) && (3*i+2*j+k/2==N)){
flag =1;
printf("men=%d women=%d child=%d\n", i, j, k);
}
}
}
}
if(flag == 0) printf("No solution!\n");
return 0;
}
7-5 打印菱形图案 (15 分)
本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。
输入在一行中给出一个正的奇数n。
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。
7
结尾无空行
- *
- * * *
- * * * * *
- * * * * * * *
- * * * * *
- * * *
- *
结尾无空行
int main()
{
int n,i,k,j,s,r,t;
scanf("%d",&n);
for(i=1;i<=n/2+1;i++)
{
for(j=1;j<=2*(n/2+1-i);j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("* ");
printf("\n");
}
for(s=1;s<=n/2;s++)
{
for(r=1;r<=2*s;r++)
printf(" ");
for(t=1;t<=s*(-2)+n;t++)
printf("* ");
printf("\n");
}
return 0;
}
我的问题:空格数的具体原理???
Wifi密码 (15)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成wifi的密码。这里简单假设每道选择题都有4个选项,有且只有1个正确答案。
输入格式:
输入第一行给出一个正整数N(<= 100),随后N行,每行按照“编号-答案”的格式给出一道题的4个选项,“T”表示正确选项,“F”表示错误选项。选项间用空格分隔。
输出格式:
在一行中输出wifi密码。
输入样例:
8
A-T B-F C-F D-F
C-T B-F A-F D-F
A-F D-F C-F B-T
B-T A-F C-F D-F
B-F D-T A-F C-F
A-T C-F B-F D-F
D-T B-F C-F A-F
C-T A-F B-F D-F
输出样例:
13224143
这道题因为不用考虑数据的正确性,只需要两两读入,遇到后面为“T”的情况就判断前面然后输出就行了。代码如下:
#include<stdio.h>
int main(void)
{
int n,i;
char a,b;
scanf("%d%*c",&n);
for (i=0;i<n*4;i++)
{
scanf("%c%*c%c%*c",&a,&b);
if (b=='T')
{
if (a=='A') printf("1");
else if (a=='B') printf("2");
else if (a=='C') printf("3");
else if (a=='D') printf("4");
}
}
return 0;
}
7-1 交换最小值和最大值 (15 分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
- 5
- 8 2 5 1 4
结尾无空行
1 2 5 4 8
结尾无空行
int main()
{
int N,t=0,j=0,i,k,m;//t是最小值位置,j是最大值位置,a[t]为最小值,a[j]为最大值
scanf("%d",&N);
int a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for (i=0;i<N;i++){
if(a[i]<a[t]) t=i;
if(a[i]>a[j]) j=i;
}
k=a[t];
a[t]=a[0];
a[0]=k;
if(j==0)j=t;
m=a[j];
a[j]=a[N-1];
a[N-1]=m;
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
return 0;
}
if(j==0)j=t;
为啥???
大佬的代码:
#include <stdio.h>
int main()
{
int max=0,min=0,n,k,i;
scanf("%d",&n);
int a[n];
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=0; i<n; i++)
{
if(a[max]<a[i])max=i;
if(a[min]>a[i])min=i;
}
k=a[0];
a[0]=a[min];
a[min]=k;
if(max==0)max=min;
k=a[n-1];
a[n-1]=a[max];
a[max]=k;
for(i=0; i<n; i++)
printf("%d ",a[i]);
return 0;
}
7-1 计算平均分并输出低于平均分的成绩 (15 分)
计算全班n个(n≤30)学生的平均分,输出平均分以及低于平均分的成绩。
先输入整数n,再依次输入n个整数成绩,以空格间隔。
在第一行以格式average=result
输出平均分(result
保留小数点后两位),在下一行依次输出低于平均分的成绩,每个成绩后跟一个空格。(注意最后一个数后面有一个空格)
- 20
- 67 78 77 45 97 65 53 90 75 88 85 76 72 75 87 56 96 92 44 70
结尾无空行
- average=74.40
- 67 45 65 53 72 56 44 70
结尾无空行
#include<stdio.h>
int main()
{
int n,score[30],i=0,sum=0;
double a=0;
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d",&score[i]);
sum+=score[i];
}
a=sum*1.0/n;
printf("average=%.2lf\n",a);
for(i=0;i<n;i++){
if(score[i]<a)
printf("%d ",score[i]);
}
return 0;
}
大佬的
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int score[30];
for (int i = 0; i < n; i++)
{
scanf("%d", &score[i]);
}
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += score[i];
}
double average = 1.0 * sum / n;
printf("average=%.2lf\n", average);
for (int i = 0; i < n; i++)
{
if (score[i] < average)
{
printf("%d ", score[i]);
}
}
return 0;
}
#include<stdio.h>
int main()
{
int n,m,i,j;
scanf("%d",&n);
int a[1000],cnt=n;//cnt是元素个数
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=0;i<n;i++)
if(a[i]==m){
for(j=i;j<cnt;j++)
a[j]=a[j+1];
cnt--,i--;
for(i=0;i<cnt;i++)
printf("%d ",a[i]);
printf("\n");
}
if (cnt==n)
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。