在delta = b * b - 4 * a *c;
上面加上一行
scanf("%d %d %d", &a, &b, &c);
去掉下面那个 scanf
问题描述
魔术师发牌问题的简介:一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下。
说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;
魔术师将黑桃A放到桌上,继续数手里的余牌,
第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。
第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,全部都准确无误。
示例代码(C语言)魔术师发牌 Visual Studio 2019
/**
* 数据结构 C语言 魔术师发牌
* @FileName MagicCard.c
* @author W.Lionel.Esaka
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Status int;
#define CORRECT 1;
#define ERROR 0;
#define OVERFLOW -1;
#define CardNumber 13;
typedef int ElemType;
/*定义循环链表结点*/
typedef struct CLinkedList {
ElemType data;
struct CLinkedList* Next;
}Node;
/*初始化链表*/
void ListInit(Node** p, int number)
{
int item = 0;
Node* temp;
Node* target;
for (int i = 1; i <= number; i++)
{
if (*p == NULL)
{
*p = (Node*)malloc(sizeof(Node));
if (!*p)exit(0);
(*p)->data = item;
(*p)->Next = *p;
}
else
{
for (target = *p; target->Next != *p; target = target->Next);
temp = (Node*)malloc(sizeof(Node));
if (!temp)exit(0);
temp->data = item;
temp->Next = *p;
target->Next = temp;
}
}
}
/*设定牌堆顺序*/
void CardOrder(Node** card)
{
int PokerSize = 2;
Node* temp;
temp = (*card);
(*card)->data = 1;
while (1)
{
for (int j = 0; j < PokerSize; j++)
{
temp = temp->Next;
if (temp->data != 0)
{
temp->Next;
j--;
}
}
if (temp->data == 0)
{
temp->data = PokerSize;
PokerSize++;
if (PokerSize == 14)
break;
}
}
}
/*遍历链表*/
void CardDisplay(Node* list)
{
Node* target;
target = list;
do {
printf("黑桃%d ", target->data);
target = target->Next;
} while (target != list);
printf("\n");
}
/*销毁链表*/
void DestoryList(Node** list)
{
Node* ptr = (*list);
Node* buff[13];
int i = 0;
while (i < 13)
{
buff[i++] = ptr;
ptr = ptr->Next;
}
for (i = 0; i < 13; i++)
{
free(buff[i]);
}
*list = 0;
printf("表已销毁\n");
}
/*入口*/
int main(void)
{
Node* list = NULL;
ListInit(&list, 13);
CardOrder(&list);
CardDisplay(list);
DestoryList(&list);
}
无法回答,因为问题描述的是另一道题目的情况,并没有提供该题目的代码和具体问题。请提供相关代码和问题描述。