C语言编程问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程问题相关的知识,希望对你有一定的参考价值。
描述
学校给高一(三)班分配了一个名额,去参加奥运会的开幕式。每个人都争着要去,可是名额只有一个,怎么办?班长想出了一个办法,让班上的所有同学(共有n个同学)围成一圈,按照顺时针方向进行编号。然后随便选定一个数m,并且从1号同学开始按照顺时针方向依次报数,1, 2, …, m,凡报到m的同学,都要主动退出圈子。然后不停地按顺时针方向逐一让报出m者出圈,最后剩下的那个人就是去参加开幕式的人。
要求:用环形链表的方法来求解。所谓环形链表,即对于链表尾结点,其next指针又指向了链表的首结点。基本思路是先创建一个环形链表,模拟众同学围成一圈的情形。然后进入循环淘汰环节,模拟从1到m报数,每次让一位同学(结点)退出圈子。
输入
输入只有一行,包括两个整数n和m,其中n和 m的含义如上所述。
输出
输出只有一个整数,即参加开幕式的那个人的编号。
输入样例
8 3
输出样例
7
#include <malloc.h>
typedef struct _list_student
int num;
struct _list_student *next;
list_student;
void list_create(list_student **head, int n)
int i = 0;
list_student *p = NULL, *q = NULL;
for(i = 0; i < n; ++i)
p = (list_student *)malloc(sizeof(list_student));
p->num = (i + 1);
if(0 != i)
q->next = p;
else
*head = p;
p->next = *head;
q = p;
return ;
void list_free(list_student *head)
list_student *p = head, *q = head;
if(!p)
return ;
do
p = p->next;
q->next = NULL;
free(q);
q = p;
while(head != p);
return ;
void list_print(list_student *head)
list_student *p = head;
if(!p)
return ;
do
printf("%d ", p->num);
p = p->next;
while(head != p);
putchar('\n');
return ;
void get_result(list_student **head, int m)
int i = 0;
list_student *p = *head, *q = *head;
if(!p)
return ;
while(p != p->next)
while(p != q->next)
q = q->next;
for(i = 1; i < m; ++i)
q = p;
p = p->next;
p = p->next;
q->next->next = NULL;
free(q->next);
q->next = p;
list_print(p);
*head = p;
return ;
int main(void)
int n = 0, m = 0;
list_student *list = NULL;
do
printf("n: ");
scanf("%d", &n);
if(n < 1)
printf("请输入正整数!\n");
continue;
break;
while(1);
do
printf("m: ");
scanf("%d", &m);
if(m < 1)
printf("请输入正整数!\n");
continue;
break;
while(1);
list_create(&list, n);
list_print(list);
get_result(&list, m);
printf("result = %d\n", list->num);
list_free(list);
return 0;
本回答被提问者采纳
c语言问题
题目是输入一串英文,把每个单词的首字母变成大写 并输出
我写的是
#include <stdio.h>
#include <string.h>
#define NUM 100
main()
int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
c[0]=c[0]-32;
for(i=0;i<NUM;i++)
if(c[i]=' ')
c[i+1]=c[i]-32;
puts(c);
不知道哪错了
#include <string.h>
#define NUM 100
main()
int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
for (i=0;i<NUM;i++) /*用循环变量来控制数组的下标*/
if(c[i]>='a'&& c[i]<='z') c[i]=c[i]-32;/*判断数组元素是不是小写,是的话转换为大写*/
puts(c);
参考技术B #include <stdio.h>
#include <string.h>
#define NUM 100
void main()
int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
c[0]=c[0]-32;
for(i=0;i<strlen(c);i++) // i 的上限要以字符串的实际长度为准
if(c[i]==' ') //逻辑判断要用两个"="号
c[i+1]=c[i+1]-32;
puts(c);
本回答被提问者和网友采纳 参考技术C #include <stdio.h>
#include <string.h>
#include <ctype.h>
#define NUM 100
main()
int i;
char c[NUM];
printf("请输入字符串:");
gets(c);
i=0;
if(islower(c[i]))
c[i]-=32;
while(c[i])
if(c[i]==' '&&c[i++]&&islower(c[i]))
c[i]-=32;
puts(c);
参考技术D 怎么回不了啊
以上是关于C语言编程问题的主要内容,如果未能解决你的问题,请参考以下文章