Liste des Groupes | Revenir à cl c |
Peter 'Shaggy' Haywood <phaywood@alphalink.com.au> writes:Groovy hepcat DFS was jivin' in comp.lang.c on Wed, 19 Mar 2025 03:42
pm. It's a cool scene! Dig it.
On 3/18/2025 11:26 PM, Keith Thompson wrote:>DFS <nospam@dfs.com> writes:There's your problem.
https://cses.fi/problemset/text/2433
"In all problems you should read input from standard input and
write output to standard output."
ha! It usually helps to read the instructions first.
The autotester expects your program to read arguments from stdin,
not from command line arguments.
It probably passes no arguments to your program, so argv[1] is a
null pointer. It's likely your program compiles (assuming the
NBSP characters were added during posting) and crashes at runtime,
producing no output.
I KNEW clc would come through!
Pretty easy fixes:
1 use scanf()
Normally I'd say take care with scanf(). But in this case, since
the
program is intended to be executed in an automated environment, it
should be fine.
The reason scanf() can be a bit iffy is that you can't control
what a
user will enter. If you search Google or Duck Duck Go for
"comp.lang.c faq" you can find more information on this and other
issues. (The FAQ is still out there, people..., somewhere...)
2 update int to long>
3 handle special case of n = 1
The problem definition doesn't mention any special case. You
should, I
think, treat 1 like any other number. So the output for 1 should be
>
1 4 2 1
4 instead of collecting the results in a char variable, I print>
them as they're calculated
Yep, that's a more usual approach.
Another suggestion I have is to use a separate function to do part
of
the work. But it's not vital.
Also, since the specification says that only positive numbers are
to
be accepted, it makes sense (to me, at least) to use an unsigned type
for n.
One more thing: using while(1){...break;} is a bit pointless. You
can
use do{...}while(1 != n) instead.
Here's my solution, for what it's worth:
And here's mine.
int
main(int argc, const char **argv)
{
unsigned int n;
scanf("%u", &n);
printf("%u ", n);
do {
n = (n & 1u) ? n * 3u + 1u : n >> 1u;
printf("%u ", n);
} while (n != 1u);
putchar('\n');
return 0;
}
Les messages affichés proviennent d'usenet.