#include <stdio.h> #include <stdlib.h> #include <memory.h> typedef struct Ppl{ int id; struct Ppl *prv; struct Ppl *nxt; } Ppl; typedef struct Grp{ struct Grp *prv; struct Grp *nxt; Ppl *hd; Ppl *tl; } Grp; typedef struct Tlt{ struct Tlt *prv; struct Tlt *nxt; Grp* hd; Grp* tl; } Tlt; int tltCnt, movCnt, grpCnt; Grp grp[1000000]; //tltCnt*tlt_id+grp_id; Tlt tlt[0]; void enter(int grp_id, int ppl_id) { //該廁所是否已有該grp //否:該廁所是否為空; if(grp[0+grp_id].hd == NULL) { //該廁所是否已有該grp:否 grp[0+grp_id].hd = (Ppl*) malloc(sizeof(Ppl)); //設定ppl及grp(hd&tl) grp[0+grp_id].tl = grp[0+grp_id].hd; grp[0+grp_id].hd->id = ppl_id; grp[0+grp_id].hd->prv = NULL; grp[0+grp_id].hd->nxt = NULL; if(tlt[0].hd == NULL) { //該廁所是否為空:是 grp[0+grp_id].prv = NULL; //設定grp(prv&nxt) grp[0+grp_id].nxt = NULL; tlt[0].hd = &grp[0+grp_id]; //設定tlt tlt[0].tl = &grp[0+grp_id]; } else { //該廁所是否為空:否 tlt[0].tl->nxt = &grp[0+grp_id]; //設定grp(prv&nxt) grp[0+grp_id].prv = tlt[0].tl; grp[0+grp_id].nxt = NULL; tlt[0].tl = tlt[0].tl->nxt; //設定tlt } } else { //該廁所是否已有該grp:是->無須設定tlt grp[0+grp_id].tl->nxt = (Ppl*) malloc(sizeof(Ppl)); //設定ppl grp[0+grp_id].tl->nxt->id = ppl_id; grp[0+grp_id].tl->nxt->prv = grp[0+grp_id].tl; grp[0+grp_id].tl->nxt->nxt = NULL; grp[0+grp_id].tl = grp[0+grp_id].tl->nxt; //設定grp } } void leave() { //該廁所的最後一個grp有幾個ppl //一個:該廁所還剩幾個grp if(tlt[0].tl->hd == tlt[0].tl->tl) { //該廁所的最後一個grp有幾個ppl:一個 if(tlt[0].hd == tlt[0].tl) { //廁所還剩幾個grp:一個 //free(tlt[0].hd->hd); tlt[0].hd->hd = NULL; //設定grp(hd) tlt[0].hd->tl = NULL; //設定grp(tl) tlt[0].hd = NULL; //設定tlt(hd) tlt[0].tl = NULL; //設定tlt(tl) } else { //廁所還剩幾個grp:至少兩個 //free(tlt[0].tl->hd); tlt[0].tl->hd = NULL; //設定grp(hd) tlt[0].tl->tl = NULL; //設定grp(tl) tlt[0].tl = tlt[0].tl->prv; tlt[0].tl->nxt = NULL; } } else { //該廁所的最後一個grp有幾個ppl:至少兩個->無須設定tlt tlt[0].tl->tl = tlt[0].tl->tl->prv; //設定grp(tl) //free(tlt[0].tl->tl->nxt); tlt[0].tl->tl->nxt = NULL; //設定ppl(nxt) } } void go() { //該廁所的第一個grp有幾個ppl //一個:該廁所還剩幾個grp if(tlt[0].hd->hd == tlt[0].hd->tl) { if(tlt[0].hd == tlt[0].tl) { tlt[0].hd->hd = NULL; tlt[0].hd->tl = NULL; tlt[0].hd = NULL; tlt[0].tl = NULL; } else { //free(tlt[0].hd->hd); tlt[0].hd->hd = NULL; tlt[0].hd->tl = NULL; tlt[0].hd = tlt[0].hd->nxt; tlt[0].hd->prv = NULL; } } else { tlt[0].hd->hd = tlt[0].hd->hd->nxt; //free(tlt[0].hd->hd->prv); tlt[0].hd->hd->prv = NULL; } } void print() { Grp *grp_head = tlt[0].hd; Ppl *ppl_head; while(grp_head != NULL) { ppl_head = grp_head->hd; while(ppl_head != NULL) { printf("%d", ppl_head->id); ppl_head = ppl_head->nxt; } grp_head = grp_head->nxt; } printf("\n"); } int main() { //輸入 scanf("%d %d %d", &tltCnt, &movCnt, &grpCnt); if(tltCnt != 1) { return 0; } //設定廁所 tlt[0].hd = NULL; tlt[0].tl = NULL; tlt[0].prv = NULL; tlt[0].nxt = NULL; for(int i = 0; i < grpCnt; i++) { grp[i].hd = NULL; grp[i].tl = NULL; } for(int i = 0; i < movCnt; i++) { //input char tmp; char mov; int movLen = 0; tmp = getchar(); mov = getchar(); for(int i = 0; i < 2; i++) { tmp = getchar(); } //main if(mov == 'e') { //enter tmp = getchar(); tmp = getchar(); tmp = getchar(); int grp_id, ppl_id, tlt_id; scanf("%d %d %d", &grp_id, &ppl_id, &tlt_id); enter(grp_id, ppl_id); } else if(mov == 'l') { //leave tmp = getchar(); tmp = getchar(); tmp = getchar(); int tlt_id; scanf("%d", &tlt_id); leave(); } else { //go int tlt_id; scanf("%d", &tlt_id); go(); } print(); } print(); return 0; }
Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!
OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.
#include <stdio.h>
int main()
{
char name[50];
printf("Enter name:");
scanf("%s", name);
printf("Hello %s \n" , name );
return 0;
}
C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.
When ever you want to perform a set of operations based on a condition if-else
is used.
if(conditional-expression) {
// code
} else {
// code
}
You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to if-else-if ladder.
switch(conditional-expression) {
case value1:
// code
break; // optional
case value2:
// code
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.
data-type array-name[size];
data-type array-name[size][size];
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
Two types of functions are present in C
Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,
User defined functions are the ones which are written by the programmer based on the requirement.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
//code
}