You could always use get_posts() to return a random post, but it would change every time the page loaded. So, here's an idea for you.
In a plugin file, set up a wp_cron hook.
<?php
/* Your plugin header goes here */
register_activation_hook( __FILE__, 'wpse24234_activation' );
function wpseo24234_activation()
{
wp_schedule_event( time(), 'daily', 'wpse24234_daily' );
}
Then hook a function into your cron action that grabs a random post (via get_posts()) and stores it in a transient that expires every 24 hours.
add_action( 'wpse24234_daily', 'wpse24234_daily_cb' );
function wpse24234_daily_cb()
{
$posts = get_posts( array( 'cat' => YOUR_CATEGORY_ID_HERE, 'numberposts' => 1, 'orderby' => 'rand' ) );
if( ! empty( $posts ) )
set_transient( 'cat_1_post', $posts[0]->ID, 60 * 60 * 12 );
}
Then on the front end, you can get the post ID with get transient, and use the ID to pull in whatever other stuff you'd like.
<?php
/* Somewhere on your site */
$id = get_transient( 'cat_1_post' );
$link = '<a href="' . get_permalink( $id ) . '">' . get_the_title( $id ) . '</a>';
?>
Todays random post from Category 1 is <?php echo $link; ?>
You'll have to do some testing to see if this will work for you, of course.