Due to the way cron does its processing, I'm not sure you can use cron by iteself to do this. From the cron(8) man page:
The cron utility then wakes up every minute, examining all stored crontabs, checking each command to see if it should be run in the current minute. When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists).
Cron has no method to identify entries it has already run. So, you could conceivably do this:
* 16-23 * * 1-5 <script>
But, that would just tell cron to run this script every minute from 16:00 to 23:59, as long as cron was running. (Looking at the crontab(5) man page, I don't think you can do "16-24" or "16-0.")
So, if you wanted something to run once between 4pm and midnight, my suggestion would be to have cron launch the script every 15 minutes, after 4pm:
*/4 16-23 * * 1-5 <script>
Then, within the script, include some method to identify if the script has already been run that day.