c语言小明今年16岁,五一C语言作业

五一C语言作业

做了好多次作业,最后发现不总结对自己的编程进步很有限,所以以后每次作业都把题目思路代码发到博客上,加油!

7-1 参考书

某次考试是开卷考试。老师规定,纸质的资料(以下统一称为参考书)可以随便带,或者说只要你背得动想带多少本参考书都行。于是同学们就开始准备参考书了。就在考试前一天,老师觉得大家准备的参考书实在是太多了,就突然改了主意。新规则规定,所带所有参考书的总页数不能超过1000页。这下小明同学犯愁了,因为他准备的参考书总页数远远超过1000。现在请你写一段C程序帮小明算一下他这次考试最多能带几本参考书。

输入格式:

共2行,第1行一个整数n(5

输出格式:

只有1行,一个整数,表示小明最多可以带的参考书的本数。

输入样例:

10

100 125 200 234 300 321 400 487 500 526

输出样例:

5

思路:

从页数最小的书开始带,按照有小到大开始排序,排完再加和判断有几本。

代码:

#include

int main(){

int n=0;

scanf("%d",&n);

int num[100]={0};

int i=0;

for(i=0;i

scanf("%d",&num[i]);

}

int j=0;

for(i=0;i

for(j=0;j

if(num[j]>num[j+1]){

int temp=num[j+1];

num[j+1]=num[j];

num[j]=temp;

}

}

}

int page=0;

int book=0;

while(page<1000){

page+=num[book];//最后打印book,如果刚好page==1000要分情况

if(page<=1000){

book++;

}

}

printf("%d",book);

return 0;

}

7-2 九宫格密码

随着智能手机的普及,各种应用也层出不穷,安卓的九宫格密码就是其中之一。安卓的九宫格密码可以看做是3×3点阵中的一条路径,只要你在画的时候,不经过重复的点,同时不跳过途中必须要经过的点,那么这条路径几乎是无所不能的。

1ad74509b0dae311b4c586d56a159f56.png

现在就请你写一段程序将这条路经转换成相应的密码。我们这里做一个限制,就是在画这条路经时,从一个点到另一个点,无论是横向还是纵向每次最多移动一个格。也就是说如果我们按程序设计的习惯用(0,0)表示左上角的点,那么从它出发可能的移动只有三个,即可以移动到(0,1)、(1,0)和(1,1)三个点,而不能像真实的九宫格密码那样可以移动到(1,2)(2,1)等点。

输入格式:

为两行,第一行为两个整数,代表起始点坐标,其中(0,0)代表左上角,(0,1)代表第一行中间,(0,2)代表右上角,(1,0)代表第二行最左等等,其余以此规律类推。第二行为长度最长为8的字符串,代表每次移动的方向。字符串中仅可能含有 ‘1’、 ‘2’、 ‘3’、 ‘4’、 ‘6’、 ‘7’、 ‘8’、 ‘9’八种字符,其中‘1’代表向左下移动、‘2’代表向下移动、‘3’代表向右下移动,‘4’代表向左移动,‘6’代表向右移动、‘7’代表向左上移动、‘8’代表向上移动、‘9’代表向右上移动。输入保证合法,不存在移到九宫格以外的可能。

输出格式:

仅一行,为上述输入的路径所代表的密码。其中每个点所代表的数字同手机键盘,也就是说(0,0)点为1,(0,1)点为2,(0,2)点为3,(1,0)点为4等等。

输入样例:

0 0

661166

输出样例:

在这里给出相应的输出。例如:

1235789

思路:

将1-9代表的运动路径用switch或设置一个函数表示出来,然后依次判断操作

要定义两个函数,一个移动xy,一个判断xy在哪;

做的时候先是指针赋值搞不定,就直接传参做了

然后xy的关系又搞错了,x代表是行,y代表列,于是交换了一下,就过了

菜狗是我!

代码:

#include

#include

void judge(int* a, int* b) {

int n = 0;

int *x=NULL;

int *y=NULL;

x=a;

y=b;

if (*x == 0) {

if (*y == 0)

n = 1;

else if (*y == 1)

n = 4;

else if (*y == 2)

n = 7;

}

else if (*x == 1) {

if (*y == 0)

n = 2;

else if (*y == 1)

n = 5;

else if (*y == 2)

n = 8;

}

else if (*x == 2) {

if (*y == 0)

n = 3;

else if (*y == 1)

n = 6;

else if (*y == 2)

n = 9;

}

printf("%d", n);

}

void pos(int* a, int* b, char c) {

int *x=NULL;

int *y=NULL;

x=a;

y=b;

//judge(x, y);

switch (c) {

case '1':

*x = *x - 1;//*解引用,&取地址

*y = *y + 1;

break;

case '2':

*x = *x;

*y = *y + 1;

break;

case '3':

*x = *x + 1;

*y = *y + 1;

break;

case '4':

*x = *x - 1;

*y = *y;

break;

case '6':

*x = *x + 1;

*y = *y;

break;

case '7':

*x = *x - 1;

*y = *y - 1;

break;

case '8':

*x = *x;

*y = *y - 1;

break;

case '9':

*x = *x + 1;

*y = *y - 1;

break;

}

judge(x, y);

//printf("%c", n);

}

int main() {

int a = 0;

int b = 0;

int* x = NULL;

int* y = NULL;

char move[10] = {0};

scanf("%d %d", &a, &b);

x = &a;

y = &b;

//getchar();

scanf("%s", move);

int len = strlen(move);

int i = 0;

judge(y,x);

for (i = 0; i < len; i++) {

pos(y, x, move[i]);

}

printf("\n");

return 0;

}

7-3 实验7_10_数组交换

设有整数数组A和B,它们长度均为n。A数组中的元素为任意整数,不超过int型数据范围。B数组中元素的值互不相同,且取值介于0至n-1之间。现要求按数组B的内容调整A中数据的次序,比如当B[0]=9时,则要求将A[0]的内容与A[9]互换。

输入格式:

首先输入一个整数n(0

输出格式:

调整后A数组的内容,数与数之间用空格分开,注意第n个数后没有空格而是换行符。

输入样例:

10

5 10 3 9 4 12 8 7 11 2

1 3 6 9 2 7 0 8 5 4

输出样例:

3 9 4 2 5 12 10 11 7 8

思路:

第n个数后没有空格,第一个不打印空格,后面的前边是空格

两个数组关系 A[B[i]]=A[i]

代码:

#include

int main(){

int n=0;

scanf("%d",&n);

int a[10]={0};

int b[10]={0};

int i=0;

for(i=0;i

scanf("%d",&a[i]);

}

for(i=0;i

scanf("%d",&b[i]);

}

for(i=0;i

int temp=a[b[i]];

a[b[i]]=a[i];

a[i]=temp;

}

for(i=0;i

if(i==0)

printf("%d",a[i]);

else

printf(" %d",a[i]);

}

return 0;

}

7-4 实验9_1_括号匹配

任意给定一个字符串,字符串中包含除了空格、换行符之外的任意字符。你的任务是检测字符串中的小括号是否配对,即“(”与“)”是否配对。如字符串“((a+b)* (c+d))”中小括号是配对的,而“((a+b)*) c+d))”则不配对。

程序运行效果:

Sample 1: ((a+b)*(c+d)) ↙

parentheses match!↙

Sample 2:

((a+b)*)c+d)) ↙

parentheses do not match!↙

输入格式:

一个长度不超过100的非空字符串,该字符串中不会出现空格、换行符。

输出格式:

见程序运行效果。

输入样例:

((a+b)*(c+d))

输出样例:

parentheses match!

思路:

可以看到,左括号总要和右括号相等,且左括号先出现,不能是右括号先出现,

所以,左括号出现加一,右括号出现减一,这个数不能为负数,

注意,这种记数的问题,往往记数过程中可能会出现不符合的情况

这里是flag<0

所以再设置一个count记录

代码:

#include

#include

int main(){

char a[101]={0};

scanf("%s",a);

int len=strlen(a);

int i=0;

int count=0;

int flag=0;

for(i=0;i

if(a[i]=='(')

flag=flag+1;

else if(a[i]==')')

flag=flag-1;

if(flag<0)

count=1;

}

if(flag==0 && count==0)

printf("parentheses match!");

else

printf("parentheses do not match!");

return 0;

}

7-5 17进制

请写一段程序将17进制数转换为10进制。

输入格式:

为一个只包含小写字母的字符串(其中a代表17进制的0,b代表17进制的1,以此类推直到q代表17进制的16),字符串以’\n’结束。

输出格式:

是一个整数,转换后的10进制数。测试用例保证合法,且转换后的整数可以用int存储。

输入样例:

caa

输出样例:

578

思路:

p进制转q进制,p进制先转10进制,10进制再转q进制

算法笔记93页写的很详细

代码:

#include

#include

int main(){

char num[100]={0};

scanf("%s",num);

int len=strlen(num);

int i=len-1;

int y=0;

int p=1;

while(i>=0){

y=y+(num[i]%97)*p;

i--;

p=p*17;

}

printf("%d",y);

return 0;

}

作业完成!

标签:10,进制,int,样例,作业,C语言,num,else,五一

来源: https://blog.youkuaiyun.com/keepgoingYi/article/details/116330334

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值