首页 > 其他分享 >PTA 约瑟夫环(C语言)

PTA 约瑟夫环(C语言)

时间:2024-12-29 11:29:09浏览次数:7  
标签:count int PTA 约瑟夫 next flag str C语言 data

题目:

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。
请按退出顺序输出每个退出人的原序号。

输入格式:

输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。

输出格式:

按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

输入样例:

在这里给出一组输入。例如:

7 3

输出样例:

3 6 2 7 5 1 4

 实现思路:

我认为我的思路不是特别好,但是可以过检测点,感兴趣的可以看看。

先建立一个循环单链表,然后用一个指针str指向当前元素,flag表示当前元素所报的数,要是是3的话,就从链表上删除。

但是,我发现还是运行超时,所以我想要是只剩下一个元素的话,直接输出就可以了,不用再数数了。例如,只剩下一个元素,而要报5000个数,时间就会很长。所以,我写了只剩下一个元素时(即conut等于n-1时)直接输出,当然还要考虑只有一个元素的情况(主要是空格的输出)。

这也是我认为我写得不好的原因,只是为了通过测试点处理的情况。

count表示已经输出的数字,作为终止条件,同时也是是否输出空格的标志。

flag是报的数,flag为3的时候删除当前对象。

str是指针,指向当前报数的对象。

 实现代码:

#include <stdio.h>
#include <stdlib.h>
//单链表结构
typedef struct Node {
	int data;
	struct Node* next;
} LinkList;
//头插法
LinkList * creat(int n) {
	LinkList *s, *r, *L;
	L = r = NULL;
	for (int i = 1; i <= n; i++) {
		s = (LinkList*)malloc(sizeof(LinkList));
		s->data = i;
		if (!L) L = s;
		else r->next = s;
		r = s;
	}
	if (r) r->next = L;
	return L;
}
int main() {
	int n, p;
	scanf("%d %d", &n, &p);
	LinkList *L = creat(n);
	LinkList *str = L;
	LinkList *s;
	int count = 0;
	int flag = 1;
	while (count < n) {
		str = str->next;
		if (count == n - 1 && count != 0) {
			printf(" %d", str->data);
			break;
		}
		if (count == n - 1 && count == 0) {
			printf("%d", str->data);
			break;
		}
		flag++;
		if (flag == p) {
			if (count == 0) printf("%d", str->data);
			else printf(" %d", str->data);
			s = str->next;
			str->next = s->next;
			str->data = s->data;
			free(s);
			count++;
			flag = 1;
		}
	}
	return 0;
}

标签:count,int,PTA,约瑟夫,next,flag,str,C语言,data
From: https://blog.csdn.net/2302_80273625/article/details/143781604

相关文章

  • PTA题目集7-8总结
    一、前言在过去十几周的时间里,我完成了题目集1-6的练习。这些题目集涵盖了从简单的答题判题程序到复杂的家居强电电路模拟系统的多个方面。通过这些练习,我不仅巩固了编程基础,还提升了解决复杂问题的能力。以下是对我完成的最后两次题目集的详细总结:题目集7 家居强电电路模拟程......
  • 将一个浮点数或任何其他类型的值赋给 unsigned char 类型的变量时,C语言进行类型转换
    C语言中,unsignefcharTemp_Val;Temp_Val=(unsignefchar)rd_temperature();若rd_temperature()函数返回51.7,则Temp_Val等于多少?在C语言中,unsignedchar 类型通常用于存储0到255之间的无符号整数。当你将一个浮点数或任何其他类型的值赋给 unsignedchar 类型的变量时,C语言......
  • C语言.基础.运算符(二)
    目录运算符类型运算符的优先级运算符的结合性算术运算符赋值运算符关系运算符逻辑运算符 位运算符C语言内置的位运算符: 位运算符的几种特殊操作:1左移实现乘法2右移实现除法3 不使用中间变量交换两个整型变量的值4判断整数的奇偶性5位操作进行高低位交......
  • C语言——指针(字符指针、指针数组、数组指针、数组参数、指针参数)
    文章目录一、字符指针二、指针数组三、数组指针1.数组指针的创建与意义2.数组指针的使用4.数组参数、指针参数1.一维数组传参2.二维数组传参一、字符指针一般的我们字符指针如下:将c的地址取出来放到p中去,指针p的类型是char*。#include<stdio.h>intmain()......
  • OOPTA7~8习题集总结
    1)前言这两次作业算是一个收尾的过程,对于电路迭代的最后处理,对我来说7-8相当有难度的。7让我发现了以前设计的不少方法存在很大的问题。8则让我发现了电压处理的忽略之处。题目内容主要还是电路系统的编写与迭代。每次的新设备都是让我能意识到自己设计上的不少缺漏。(2)设计与分析......
  • PTA家居电路模拟3到家居模拟电路4
    目录一、答题判题程序第四次迭代1、题目分析2、题目类图3、题目时序图4、题目思路二、家居强电电路模拟程序第一次迭代1、题目分析2、题目类图3、题目时序图4、题目思路三、家居强电电路模拟程序第二次迭代1、题目分析2、题目类图3、题目时序图4、题目思路四、踩......
  • c语言书籍排序 多数组协同排序 按价格排序【书名同步】 带有空格的字符串读取
    题目:编写程序,从键盘输入n(n<10)本书的名称和定价并存入结构数组中,按单价从小到大排序并输出排序后的书籍信息。输入输出示例:括号内为说明,无需输入输出输入样例:3(n=3)ProgramminginC21.5ProgramminginVB18.5ProgramminginDelphi20输出样例:Programmingin......
  • PTA题目集7~8的总结性Blog
    ·前言本次的两个作业,由家居强电电路模拟程序-3、家居强电电路模拟程序-4组成。家居强电电路模拟程序-3模拟强电电路的运行,支持各种控制设备、受控设备的运行逻辑、计算各设备的电压、电流、亮度、转速等参数、支持电路的串联与并联结构。;最后家居强电电路模拟程序-4则在前一......
  • C语言实现DES加密 配完整源代码
    示例如下:二进制明文:0000000100100011010001010110011110001001101010111100110111101111二进制密文:0001001100110100010101110111100110011011101111001101111111110001源代码如下:#include<stdio.h>voidoutput(chardata[],intnumber);voidchange(intimax,intjm......
  • 小小计算器(C语言程序)
             ......